|  | @@ -10,6 +10,7 @@ import (
 | 
											
												
													
														|  |  	"time"
 |  |  	"time"
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	"gitee.com/xuyiping_admin/pkg/logger/zaplog"
 |  |  	"gitee.com/xuyiping_admin/pkg/logger/zaplog"
 | 
											
												
													
														|  | 
 |  | +	"go.uber.org/zap"
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
 |  |  	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
 | 
											
												
													
														|  |  	operationPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/operation"
 |  |  	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 创建或者更新系统用户
 |  |  // SystemUserCreateOrUpdate 创建或者更新系统用户
 | 
											
												
													
														|  |  func (s *StoreEntry) SystemUserCreateOrUpdate(ctx context.Context, req *pasturePb.SearchUserRequest) error {
 |  |  func (s *StoreEntry) SystemUserCreateOrUpdate(ctx context.Context, req *pasturePb.SearchUserRequest) error {
 | 
											
												
													
														|  | 
 |  | +	systemUser := &model.SystemUser{}
 | 
											
												
													
														|  |  	if req.Id > 0 {
 |  |  	if req.Id > 0 {
 | 
											
												
													
														|  | -		systemUser := &model.SystemUser{}
 |  | 
 | 
											
												
													
														|  | 
 |  | +		systemUser.Id = int64(req.Id)
 | 
											
												
													
														|  |  		if err := s.DB.First(systemUser).Error; err != nil {
 |  |  		if err := s.DB.First(systemUser).Error; err != nil {
 | 
											
												
													
														|  |  			return xerr.WithStack(err)
 |  |  			return xerr.WithStack(err)
 | 
											
												
													
														|  |  		}
 |  |  		}
 | 
											
												
													
														|  |  		req.Password = systemUser.Password
 |  |  		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{}{
 |  |  	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
 |  |  	}, 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
 |  |  	// 解析token
 | 
											
												
													
														|  |  	userName, err := s.GetCurrentUserName(ctx)
 |  |  	userName, err := s.GetCurrentUserName(ctx)
 | 
											
												
													
														|  |  	if err != nil {
 |  |  	if err != nil {
 | 
											
										
											
												
													
														|  | @@ -290,129 +300,40 @@ func (s *StoreEntry) GetSystemUserPermissions(ctx context.Context, token string)
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |  	// 根据用户token获取用户数据
 |  |  	// 根据用户token获取用户数据
 | 
											
												
													
														|  |  	systemUser := &model.SystemUser{Name: userName}
 |  |  	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) {
 |  |  		if errors.Is(err, gorm.ErrRecordNotFound) {
 | 
											
												
													
														|  |  			return nil, xerr.Custom("该用户数据不存在")
 |  |  			return nil, xerr.Custom("该用户数据不存在")
 | 
											
												
													
														|  |  		}
 |  |  		}
 | 
											
												
													
														|  |  		return nil, xerr.WithStack(err)
 |  |  		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)
 |  |  		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 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 添加角色
 |  |  // SystemRoleCreateOrUpdate 添加角色
 | 
											
										
											
												
													
														|  | @@ -534,11 +455,14 @@ func (s *StoreEntry) GetRoleMenuList(ctx context.Context, roleId int64) (*pastur
 | 
											
												
													
														|  |  		return nil, xerr.Custom("该数据已被删除")
 |  |  		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{
 |  |  	return &pasturePb.SystemRoleMenuResponse{
 | 
											
												
													
														|  |  		Code:    http.StatusOK,
 |  |  		Code:    http.StatusOK,
 | 
											
												
													
														|  |  		Message: "ok",
 |  |  		Message: "ok",
 | 
											
												
													
														|  | -		Data:    model.SystemRoleMenuSlice(item).ToPB(),
 |  | 
 | 
											
												
													
														|  | 
 |  | +		Data:    model.SystemRoleMenuSlice(menuList).ToPB(),
 | 
											
												
													
														|  |  	}, nil
 |  |  	}, nil
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  }
 |  |  }
 |