更新缓存和文件分类
This commit is contained in:
@@ -127,9 +127,19 @@ func (c *RoleController) GetRoleByTenantId() {
|
||||
return
|
||||
}
|
||||
|
||||
// 获取当前登录用户类型(从JWT中间件获取)
|
||||
userType, _ := c.Ctx.Input.GetData("userType").(string)
|
||||
isEmployee := userType == "employee"
|
||||
|
||||
// 转换为前端需要的格式,确保包含 tenantId 和 default 字段
|
||||
// 如果是租户登录(employee),过滤掉 default=1 的角色
|
||||
roleList := make([]map[string]interface{}, 0)
|
||||
for _, role := range roles {
|
||||
// 如果是租户登录,且角色的 default=1,则跳过(不显示)
|
||||
if isEmployee && role.Default == 1 {
|
||||
continue
|
||||
}
|
||||
|
||||
roleList = append(roleList, map[string]interface{}{
|
||||
"roleId": role.RoleId,
|
||||
"tenantId": role.TenantId,
|
||||
|
||||
+68
-1
@@ -99,6 +99,7 @@ func DeleteMenu(id int) error {
|
||||
}
|
||||
|
||||
// GetTenantMenus 根据角色ID获取租户菜单(只返回该角色有权限的菜单,且只返回页面菜单menu_type=1)
|
||||
// 注意:会自动包含所有父菜单,即使父菜单不在权限列表中
|
||||
func GetTenantMenus(roleId int) ([]map[string]interface{}, error) {
|
||||
o := orm.NewOrm()
|
||||
|
||||
@@ -141,7 +142,73 @@ func GetTenantMenus(roleId int) ([]map[string]interface{}, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 4. 转换为map格式
|
||||
// 4. 收集所有需要查询的父菜单ID(递归查找所有父菜单)
|
||||
parentIds := make(map[int]bool)
|
||||
var findParents func(pid int)
|
||||
findParents = func(pid int) {
|
||||
if pid == 0 || parentIds[pid] {
|
||||
return
|
||||
}
|
||||
parentIds[pid] = true
|
||||
// 查询父菜单
|
||||
var parentMenu Menu
|
||||
err := o.Raw("SELECT id, parent_id FROM yz_menus WHERE id = ? AND delete_time IS NULL AND menu_type = 1", pid).QueryRow(&parentMenu.Id, &parentMenu.ParentId)
|
||||
if err == nil && parentMenu.Id > 0 {
|
||||
// 继续查找父菜单的父菜单
|
||||
if parentMenu.ParentId > 0 {
|
||||
findParents(parentMenu.ParentId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 为每个菜单查找其父菜单
|
||||
for _, m := range menus {
|
||||
if m.ParentId > 0 {
|
||||
findParents(m.ParentId)
|
||||
}
|
||||
}
|
||||
|
||||
// 5. 如果存在父菜单,查询所有父菜单
|
||||
if len(parentIds) > 0 {
|
||||
parentIdList := make([]int, 0, len(parentIds))
|
||||
for pid := range parentIds {
|
||||
parentIdList = append(parentIdList, pid)
|
||||
}
|
||||
|
||||
// 构建父菜单查询
|
||||
parentPlaceholders := make([]string, len(parentIdList))
|
||||
parentArgs := make([]interface{}, len(parentIdList)+1)
|
||||
for i, id := range parentIdList {
|
||||
parentPlaceholders[i] = "?"
|
||||
parentArgs[i] = id
|
||||
}
|
||||
parentArgs[len(parentIdList)] = 1 // menu_type=1
|
||||
|
||||
parentQuery := "SELECT id, name, path, parent_id, icon, `order`, status, component_path, is_external, external_url, menu_type, permission " +
|
||||
"FROM yz_menus " +
|
||||
"WHERE id IN (" + strings.Join(parentPlaceholders, ",") + ") " +
|
||||
"AND delete_time IS NULL " +
|
||||
"AND menu_type = ? " +
|
||||
"ORDER BY `order`, id"
|
||||
|
||||
var parentMenus []*Menu
|
||||
_, err = o.Raw(parentQuery, parentArgs...).QueryRows(&parentMenus)
|
||||
if err == nil && len(parentMenus) > 0 {
|
||||
// 将父菜单添加到结果中(去重)
|
||||
menuMap := make(map[int]*Menu)
|
||||
for _, m := range menus {
|
||||
menuMap[m.Id] = m
|
||||
}
|
||||
for _, pm := range parentMenus {
|
||||
if _, exists := menuMap[pm.Id]; !exists {
|
||||
menus = append(menus, pm)
|
||||
menuMap[pm.Id] = pm
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 6. 转换为map格式
|
||||
result := make([]map[string]interface{}, 0, len(menus))
|
||||
for _, m := range menus {
|
||||
item := map[string]interface{}{
|
||||
|
||||
Reference in New Issue
Block a user