|
@@ -60,7 +60,8 @@ func (s *sAdminRole) List(ctx *gin.Context, req forms.AdminRoleListReq) serializ
|
|
|
}
|
|
|
logDB := query.Use(config.LogDBGroup[sid])
|
|
|
pq := logDB.AdminRolePermission
|
|
|
- mq := logDB.AdminRoleMenu
|
|
|
+ rmq := logDB.AdminRoleMenu
|
|
|
+ mq := logDB.AdminMenu
|
|
|
// 查询该角色各系统下的权限
|
|
|
permissionIds := make([]int32, 0)
|
|
|
if err := pq.Where(pq.RoleID.Eq(int32(v.ID))).Pluck(pq.PermissionID, &permissionIds); err != nil {
|
|
@@ -72,10 +73,56 @@ func (s *sAdminRole) List(ctx *gin.Context, req forms.AdminRoleListReq) serializ
|
|
|
permissionsMap[sid] = permissionIds
|
|
|
}
|
|
|
// 查询该角色各系统下的页面
|
|
|
+ type RolePage struct {
|
|
|
+ PageID int32
|
|
|
+ ParentID int32
|
|
|
+ }
|
|
|
+ pages := make([]*RolePage, 0)
|
|
|
+ if err := rmq.LeftJoin(mq, mq.ID.EqCol(rmq.PageID)).Where(rmq.RoleID.Eq(int32(v.ID))).Select(rmq.PageID, mq.ParentID).Scan(&pages); err != nil {
|
|
|
+ return serializer.Err(consts.CodeDBError, "查询出错 RolePage", err)
|
|
|
+ }
|
|
|
+ rolePageMap := make(map[int32][]int32)
|
|
|
+ parentPageIdsMap := make(map[int32]struct{}, 0)
|
|
|
+ for _, item := range pages {
|
|
|
+ parentPageIdsMap[item.ParentID] = struct{}{}
|
|
|
+ if item.ParentID == 0 {
|
|
|
+ rolePageMap[item.ParentID] = make([]int32, 0)
|
|
|
+ } else {
|
|
|
+ if _, ok := rolePageMap[item.ParentID]; ok {
|
|
|
+ rolePageMap[item.ParentID] = append(rolePageMap[item.ParentID], item.PageID)
|
|
|
+ } else {
|
|
|
+ rolePageMap[item.ParentID] = []int32{item.PageID}
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ parentPageIds := make([]int32, 0)
|
|
|
+ for k := range parentPageIdsMap {
|
|
|
+ parentPageIds = append(parentPageIds, k)
|
|
|
+ }
|
|
|
+ type ParentPageSubNum struct {
|
|
|
+ SubNum int32
|
|
|
+ ParentID int32
|
|
|
+ }
|
|
|
+ parentPageSubs := make([]*ParentPageSubNum, 0)
|
|
|
+ if err := mq.Select(mq.ParentID, mq.ID.Count().As("subNum")).Where(mq.ParentID.In(parentPageIds...)).Group(mq.ParentID).Scan(&parentPageSubs); err != nil {
|
|
|
+ return serializer.Err(consts.CodeDBError, "查询出错 allPages", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ parentPageSubMap := make(map[int32]int32)
|
|
|
+ for _, item := range parentPageSubs {
|
|
|
+ parentPageSubMap[item.ParentID] = item.SubNum
|
|
|
+ }
|
|
|
pageIds := make([]int32, 0)
|
|
|
- if err := mq.Where(mq.RoleID.Eq(int32(v.ID))).Pluck(mq.PageID, &pageIds); err != nil {
|
|
|
- return serializer.Response{}
|
|
|
+ for parentId, subPages := range rolePageMap {
|
|
|
+ if parentPageSubMap[parentId] == int32(len(subPages)) {
|
|
|
+ pageIds = append(pageIds, subPages...)
|
|
|
+ pageIds = append(pageIds, parentId)
|
|
|
+ } else {
|
|
|
+ pageIds = append(pageIds, subPages...)
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
if _, ok := pagesMap[sid]; ok {
|
|
|
pagesMap[sid] = append(pagesMap[sid], pageIds...)
|
|
|
} else {
|