|
@@ -10,6 +10,7 @@ import (
|
|
|
"time"
|
|
|
|
|
|
"gitee.com/xuyiping_admin/pkg/logger/zaplog"
|
|
|
+ "go.uber.org/zap"
|
|
|
|
|
|
pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
|
|
|
operationPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/operation"
|
|
@@ -150,12 +151,21 @@ func (s *StoreEntry) IsShowSystemUser(ctx context.Context, userId int64) error {
|
|
|
|
|
|
// SystemUserCreateOrUpdate 创建或者更新系统用户
|
|
|
func (s *StoreEntry) SystemUserCreateOrUpdate(ctx context.Context, req *pasturePb.SearchUserRequest) error {
|
|
|
+ systemUser := &model.SystemUser{}
|
|
|
if req.Id > 0 {
|
|
|
- systemUser := &model.SystemUser{}
|
|
|
+ systemUser.Id = int64(req.Id)
|
|
|
if err := s.DB.First(systemUser).Error; err != nil {
|
|
|
return xerr.WithStack(err)
|
|
|
}
|
|
|
req.Password = systemUser.Password
|
|
|
+ } else {
|
|
|
+ if err := s.DB.Where("name = ?", req.Name).First(systemUser).Error; err != nil {
|
|
|
+ if !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
+ return xerr.WithStack(err)
|
|
|
+ }
|
|
|
+ } else if systemUser.Id > 0 {
|
|
|
+ return xerr.Custom("该用户名称已经存在")
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if err := s.DB.Model(&model.SystemUser{}).Where(map[string]interface{}{
|
|
@@ -281,8 +291,8 @@ func (s *StoreEntry) DetailsSystemUser(ctx context.Context, userId int64) (*oper
|
|
|
}, nil
|
|
|
}
|
|
|
|
|
|
-// GetSystemUserPermissions 返回系统用户相关菜单权限
|
|
|
-func (s *StoreEntry) GetSystemUserPermissions(ctx context.Context, token string) (*operationPb.SystemUserMenuPermissions, error) {
|
|
|
+// GetSystemUserMenu 返回系统用户相关菜单权限
|
|
|
+func (s *StoreEntry) GetSystemUserMenu(ctx context.Context) (*pasturePb.SystemUserMenuTreeResponse, error) {
|
|
|
// 解析token
|
|
|
userName, err := s.GetCurrentUserName(ctx)
|
|
|
if err != nil {
|
|
@@ -290,129 +300,40 @@ func (s *StoreEntry) GetSystemUserPermissions(ctx context.Context, token string)
|
|
|
}
|
|
|
// 根据用户token获取用户数据
|
|
|
systemUser := &model.SystemUser{Name: userName}
|
|
|
- if err = s.DB.Where("name = ?", userName).First(systemUser).Error; err != nil {
|
|
|
+ if err = s.DB.Where("name = ?", userName).
|
|
|
+ Where("is_show = ? and is_delete = ?", pasturePb.IsShow_Ok, pasturePb.IsShow_Ok).
|
|
|
+ First(systemUser).Error; err != nil {
|
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
return nil, xerr.Custom("该用户数据不存在")
|
|
|
}
|
|
|
return nil, xerr.WithStack(err)
|
|
|
}
|
|
|
- /*roleIds := systemUser.SystemUserRoleToSlice()*/
|
|
|
- roleIds := []int64{1}
|
|
|
+ if systemUser.RoleId <= 0 {
|
|
|
+ return nil, xerr.Custom("该用户没有角色")
|
|
|
+ }
|
|
|
// 获取用户角色数据
|
|
|
- systemRoles := make([]*model.SystemRole, 0)
|
|
|
- if err = s.DB.Where("is_show = ?", operationPb.IsShow_OK).Find(&systemRoles, roleIds).Error; err != nil {
|
|
|
+ systemRole := &model.SystemRole{}
|
|
|
+ if err = s.DB.Where("id = ?", systemUser.RoleId).First(systemRole).Error; err != nil {
|
|
|
+ if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
+ return nil, xerr.Custom("该用户角色不存在")
|
|
|
+ }
|
|
|
return nil, xerr.WithStack(err)
|
|
|
}
|
|
|
-
|
|
|
- systemAllPermissionsList := &SystemAllPermissionsList{
|
|
|
- MenuList: make([]*model.SystemRoleMenu, 0),
|
|
|
- }
|
|
|
-
|
|
|
- for _, role := range systemRoles {
|
|
|
- zaplog.Info(role.Name)
|
|
|
- /*item := s.GetSystemRoleMenuList(ctx, role.Id)
|
|
|
- systemAllPermissionsList.MenuList = append(systemAllPermissionsList.MenuList, item.MenuList...)*/
|
|
|
- }
|
|
|
-
|
|
|
- systemAllPermissionsList.SystemUserMenuPermissionsUnDuplicate()
|
|
|
-
|
|
|
- menuList, err := s.GetMenuList(ctx, systemAllPermissionsList.MenuList)
|
|
|
- if err != nil {
|
|
|
+ // 获取用户菜单
|
|
|
+ systemMenu := &model.SystemMenu{}
|
|
|
+ if err = s.DB.Table(fmt.Sprintf("%s as a", new(model.SystemRoleMenu).TableName())).
|
|
|
+ Joins("LEFT JOIN system_menu AS b ON a.menu_id = b.id").
|
|
|
+ Where("a.role_id = ? and b.is_delete = ?", systemRole.Id, pasturePb.IsShow_Ok).
|
|
|
+ Find(&systemMenu).Error; err != nil {
|
|
|
return nil, xerr.WithStack(err)
|
|
|
}
|
|
|
|
|
|
- return s.SystemPermissionsFormatPb(menuList), nil
|
|
|
-}
|
|
|
-
|
|
|
-func (s *StoreEntry) SystemPermissionsFormatPb(menuList []*model.SystemMenu) *operationPb.SystemUserMenuPermissions {
|
|
|
- systemUserMenuPermissions := &operationPb.SystemUserMenuPermissions{
|
|
|
- Code: http.StatusOK,
|
|
|
- Msg: "ok",
|
|
|
- Data: &operationPb.SystemUserMenuData{
|
|
|
- PastureList: make([]*operationPb.AddPastureRequest, 0),
|
|
|
- MenuList: make([]*operationPb.AddMenuRequest, 0),
|
|
|
- MobileList: make([]*operationPb.AddMobileRequest, 0),
|
|
|
- MenuButtonsPath: make([]*operationPb.MenuButtonsPath, 0),
|
|
|
- },
|
|
|
- }
|
|
|
-
|
|
|
- /*level := make(map[int32][]*operationPb.AddMenuRequest, 0)
|
|
|
- for _, menu := range menuList {
|
|
|
- if _, ok := level[menu.Level]; !ok {
|
|
|
- level[menu.Level] = make([]*operationPb.AddMenuRequest, 0)
|
|
|
- }
|
|
|
- level[menu.Level] = append(level[menu.Level], &operationPb.AddMenuRequest{
|
|
|
- Id: int32(menu.Id),
|
|
|
- Name: menu.Name,
|
|
|
- ParentId: int32(menu.ParentId),
|
|
|
- MenuType: menu.MenuType,
|
|
|
- Title: menu.Title,
|
|
|
- Path: menu.Path,
|
|
|
- IsShow: menu.IsShow,
|
|
|
- Component: menu.Component,
|
|
|
- Icon: menu.Icon,
|
|
|
- Sort: menu.Sort,
|
|
|
- Redirect: menu.Redirect,
|
|
|
- CreatedAt: int32(menu.CreatedAt),
|
|
|
- CreatedAtFormat: time.Unix(menu.CreatedAt, 0).Format(model.LayoutTime),
|
|
|
- Level: menu.Level,
|
|
|
- Affix: true,
|
|
|
- KeepAlive: true,
|
|
|
- Children: make([]*operationPb.AddMenuRequest, 0),
|
|
|
- })
|
|
|
- if menu.Level == model.Level3 {
|
|
|
- systemUserMenuPermissions.Data.MenuButtonsPath = append(systemUserMenuPermissions.Data.MenuButtonsPath, &operationPb.MenuButtonsPath{
|
|
|
- Path: menu.Path,
|
|
|
- MenuId: int32(menu.Id),
|
|
|
- })
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- level2IsShow := make([]int32, 0)
|
|
|
- for _, leve2Data := range level[model.Level2] {
|
|
|
- for _, leve3Data := range level[model.Level3] {
|
|
|
- if leve3Data.ParentId == leve2Data.Id && strings.Contains(leve3Data.Path, ":page") {
|
|
|
- level2IsShow = append(level2IsShow, leve2Data.Id)
|
|
|
- }
|
|
|
-
|
|
|
- if leve3Data.ParentId == leve2Data.Id {
|
|
|
- if leve2Data.Children == nil {
|
|
|
- leve2Data.Children = make([]*operationPb.AddMenuRequest, 0)
|
|
|
- }
|
|
|
- leve2Data.Children = append(leve2Data.Children, leve3Data)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- sort.SliceStable(level[model.Level2], func(i, j int) bool {
|
|
|
- return level[model.Level2][i].Sort > level[model.Level2][j].Sort
|
|
|
- })
|
|
|
- for _, leve2Data := range level[model.Level2] {
|
|
|
- var info bool
|
|
|
- for _, v := range level2IsShow {
|
|
|
- if v == leve2Data.Id {
|
|
|
- info = true
|
|
|
- }
|
|
|
- }
|
|
|
- if !info {
|
|
|
- continue
|
|
|
- }
|
|
|
- for _, leve1Data := range level[model.Level1] {
|
|
|
- if leve2Data.ParentId == leve1Data.Id {
|
|
|
- if leve1Data.Children == nil {
|
|
|
- leve1Data.Children = make([]*operationPb.AddMenuRequest, 0)
|
|
|
- }
|
|
|
- leve1Data.Children = append(leve1Data.Children, leve2Data)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- sort.SliceStable(level[model.Level1], func(i, j int) bool {
|
|
|
- return level[model.Level1][i].Sort > level[model.Level1][j].Sort
|
|
|
- })
|
|
|
-
|
|
|
- systemUserMenuPermissions.Data.MenuList = level[model.Level1]*/
|
|
|
- return systemUserMenuPermissions
|
|
|
+ // 获取菜单权限
|
|
|
+ return &pasturePb.SystemUserMenuTreeResponse{
|
|
|
+ Code: http.StatusOK,
|
|
|
+ Message: "ok",
|
|
|
+ Data: nil,
|
|
|
+ }, nil
|
|
|
}
|
|
|
|
|
|
// SystemRoleCreateOrUpdate 添加角色
|
|
@@ -534,11 +455,14 @@ func (s *StoreEntry) GetRoleMenuList(ctx context.Context, roleId int64) (*pastur
|
|
|
return nil, xerr.Custom("该数据已被删除")
|
|
|
}
|
|
|
|
|
|
- item := s.GetSystemRoleMenuList(ctx, systemRole.Id)
|
|
|
+ menuList := make([]*model.SystemRoleMenu, 0)
|
|
|
+ if err := s.DB.Where("role_id = ?", systemRole.Id).Find(&menuList).Error; err != nil {
|
|
|
+ zaplog.Error("GetSystemRoleMenuList", zap.Any("Err", err))
|
|
|
+ }
|
|
|
return &pasturePb.SystemRoleMenuResponse{
|
|
|
Code: http.StatusOK,
|
|
|
Message: "ok",
|
|
|
- Data: model.SystemRoleMenuSlice(item).ToPB(),
|
|
|
+ Data: model.SystemRoleMenuSlice(menuList).ToPB(),
|
|
|
}, nil
|
|
|
|
|
|
}
|