|
@@ -7,17 +7,12 @@ import (
|
|
|
"kpt-pasture/model"
|
|
|
"kpt-pasture/util"
|
|
|
"net/http"
|
|
|
- "sort"
|
|
|
- "strings"
|
|
|
"time"
|
|
|
|
|
|
pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
|
|
|
operationPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/operation"
|
|
|
"gitee.com/xuyiping_admin/pkg/jwt"
|
|
|
- "gitee.com/xuyiping_admin/pkg/logger/zaplog"
|
|
|
"gitee.com/xuyiping_admin/pkg/xerr"
|
|
|
- "go.uber.org/zap"
|
|
|
-
|
|
|
"gorm.io/gorm"
|
|
|
)
|
|
|
|
|
@@ -300,8 +295,7 @@ func (s *StoreEntry) SystemPermissionsFormatPb(menuList []*model.SystemMenu) *op
|
|
|
},
|
|
|
}
|
|
|
|
|
|
- // TODO 后面优化成递归算法
|
|
|
- level := make(map[int32][]*operationPb.AddMenuRequest, 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)
|
|
@@ -376,104 +370,90 @@ func (s *StoreEntry) SystemPermissionsFormatPb(menuList []*model.SystemMenu) *op
|
|
|
return level[model.Level1][i].Sort > level[model.Level1][j].Sort
|
|
|
})
|
|
|
|
|
|
- systemUserMenuPermissions.Data.MenuList = level[model.Level1]
|
|
|
+ systemUserMenuPermissions.Data.MenuList = level[model.Level1]*/
|
|
|
return systemUserMenuPermissions
|
|
|
}
|
|
|
|
|
|
-// CreateSystemRole 添加角色
|
|
|
-func (s *StoreEntry) CreateSystemRole(ctx context.Context, req *operationPb.AddRoleRequest) error {
|
|
|
- if err := s.DB.Transaction(func(tx *gorm.DB) error {
|
|
|
- // 创建角色数据
|
|
|
- role := model.NewSystemRole(req)
|
|
|
- if err := tx.Create(role).Error; err != nil {
|
|
|
- return xerr.WithStack(err)
|
|
|
- }
|
|
|
- // 创建角色菜单权限数据
|
|
|
- if len(req.MenuId) > 0 {
|
|
|
- menuPermissions := model.NewSystemMenuPermissions(role.Id, req.MenuId)
|
|
|
- if err := tx.Create(menuPermissions).Error; err != nil {
|
|
|
- return xerr.WithStack(err)
|
|
|
- }
|
|
|
- }
|
|
|
+// SystemRoleCreateOrUpdate 添加角色
|
|
|
+func (s *StoreEntry) SystemRoleCreateOrUpdate(ctx context.Context, req *pasturePb.SearchRoleRequest) error {
|
|
|
+ isShow := pasturePb.IsShow_Ok
|
|
|
+ if req.Id > 0 {
|
|
|
+ isShow = req.IsShow
|
|
|
+ }
|
|
|
|
|
|
- return nil
|
|
|
- }); err != nil {
|
|
|
+ if err := s.DB.Model(&model.SystemRole{}).Where(map[string]interface{}{
|
|
|
+ "id": req.Id,
|
|
|
+ }).Assign(map[string]interface{}{
|
|
|
+ "name": req.Name,
|
|
|
+ "remarks": req.Remarks,
|
|
|
+ "is_delete": operationPb.IsShow_OK,
|
|
|
+ "is_show": isShow,
|
|
|
+ }).FirstOrCreate(&model.SystemRole{}).Error; err != nil {
|
|
|
return xerr.WithStack(err)
|
|
|
}
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-// EditSystemRole 编辑角色
|
|
|
-func (s *StoreEntry) EditSystemRole(ctx context.Context, req *operationPb.AddRoleRequest) error {
|
|
|
- role := &model.SystemRole{Id: int64(req.Id)}
|
|
|
- if err := s.DB.First(role).Error; err != nil {
|
|
|
+// DeleteSystemRole 删除系统角色
|
|
|
+func (s *StoreEntry) DeleteSystemRole(ctx context.Context, roleId int64) error {
|
|
|
+ systemRole := &model.SystemRole{
|
|
|
+ Id: roleId,
|
|
|
+ }
|
|
|
+ if err := s.DB.First(systemRole).Error; err != nil {
|
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
return xerr.Custom("该数据不存在")
|
|
|
}
|
|
|
return xerr.WithStack(err)
|
|
|
}
|
|
|
|
|
|
- if err := s.DB.Transaction(func(tx *gorm.DB) error {
|
|
|
- updateSystemRole := model.NewSystemRole(req)
|
|
|
- if err := tx.Omit("is_show").
|
|
|
- Where("id = ?", role.Id).
|
|
|
- Updates(updateSystemRole).Error; err != nil {
|
|
|
- return xerr.WithStack(err)
|
|
|
- }
|
|
|
-
|
|
|
- // 更新菜单权限关系表
|
|
|
- menuIds := req.MenuId
|
|
|
- if err := tx.Model(new(model.SystemMenuPermissions)).
|
|
|
- Where("role_id = ?", req.Id).Update("is_show", operationPb.IsShow_NO).Error; err != nil {
|
|
|
- return xerr.WithStack(err)
|
|
|
- }
|
|
|
-
|
|
|
- newSystemMenuPermissions := model.NewSystemMenuPermissions(int64(req.Id), menuIds)
|
|
|
- if err := tx.Create(newSystemMenuPermissions).Error; err != nil {
|
|
|
- return xerr.WithStack(err)
|
|
|
- }
|
|
|
- return nil
|
|
|
- }); err != nil {
|
|
|
+ if err := s.DB.Model(systemRole).Update("is_delete", pasturePb.IsShow_No).Error; err != nil {
|
|
|
return xerr.WithStack(err)
|
|
|
}
|
|
|
-
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-// DeleteSystemRole 删除系统角色
|
|
|
-func (s *StoreEntry) DeleteSystemRole(ctx context.Context, roleId int64) error {
|
|
|
+// IsShowSystemRole 角色是否启用
|
|
|
+func (s *StoreEntry) IsShowSystemRole(ctx context.Context, roleId int64) error {
|
|
|
systemRole := &model.SystemRole{
|
|
|
Id: roleId,
|
|
|
}
|
|
|
if err := s.DB.First(systemRole).Error; err != nil {
|
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
- return xerr.Custom("该数据不存在")
|
|
|
+ return xerr.Custom("该角色不存在")
|
|
|
}
|
|
|
return xerr.WithStack(err)
|
|
|
}
|
|
|
+ isShow := pasturePb.IsShow_No
|
|
|
+ if systemRole.IsShow == pasturePb.IsShow_No {
|
|
|
+ isShow = pasturePb.IsShow_Ok
|
|
|
+ }
|
|
|
|
|
|
- if err := s.DB.Model(systemRole).Update("is_show", operationPb.IsShow_NO).Error; err != nil {
|
|
|
+ if err := s.DB.Model(systemRole).Update("is_show", isShow).Error; err != nil {
|
|
|
return xerr.WithStack(err)
|
|
|
}
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
// SearchSystemRoleList 查询系统角色
|
|
|
-func (s *StoreEntry) SearchSystemRoleList(ctx context.Context, req *operationPb.SearchRoleRequest) (*operationPb.SearchRoleResponse, error) {
|
|
|
+func (s *StoreEntry) SearchSystemRoleList(ctx context.Context, req *pasturePb.SearchRoleRequest) (*pasturePb.SearchRoleResponse, error) {
|
|
|
systemRoleList := make([]*model.SystemRole, 0)
|
|
|
var count int64 = 0
|
|
|
|
|
|
- pref := s.DB.Model(new(model.SystemRole)).Where("is_show = ?", operationPb.IsShow_OK)
|
|
|
+ pref := s.DB.Model(new(model.SystemRole)).Where("is_delete = ?", operationPb.IsShow_OK)
|
|
|
if req.Name != "" {
|
|
|
pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
|
|
|
}
|
|
|
|
|
|
+ if req.IsShow > 0 {
|
|
|
+ pref.Where("is_show = ?", req.IsShow)
|
|
|
+ }
|
|
|
+
|
|
|
if err := pref.Order("id desc").Count(&count).Limit(int(req.Pagination.PageSize)).
|
|
|
Offset(int(req.Pagination.PageOffset)).Find(&systemRoleList).Error; err != nil {
|
|
|
return nil, xerr.WithStack(err)
|
|
|
}
|
|
|
|
|
|
- permissionsMenuMap := make(map[int64][]*model.SystemMenu, 0)
|
|
|
+ /*permissionsMenuMap := make(map[int64][]*model.SystemMenu, 0)
|
|
|
for _, role := range systemRoleList {
|
|
|
systemMenuList := make([]*model.SystemMenu, 0)
|
|
|
if err := s.DB.Table(new(model.SystemMenu).TableName()).Select(fmt.Sprintf("%s.*", new(model.SystemMenu).TableName())).
|
|
@@ -484,16 +464,16 @@ func (s *StoreEntry) SearchSystemRoleList(ctx context.Context, req *operationPb.
|
|
|
zaplog.Error("SearchSystemRoleList", zap.Any("SystemMenuPermissions", err))
|
|
|
}
|
|
|
permissionsMenuMap[role.Id] = systemMenuList
|
|
|
- }
|
|
|
+ }*/
|
|
|
|
|
|
- return &operationPb.SearchRoleResponse{
|
|
|
- Code: http.StatusOK,
|
|
|
- Msg: "ok",
|
|
|
- Data: &operationPb.SearchRoleData{
|
|
|
+ return &pasturePb.SearchRoleResponse{
|
|
|
+ Code: http.StatusOK,
|
|
|
+ Message: "ok",
|
|
|
+ Data: &pasturePb.SearchRoleData{
|
|
|
Page: req.Pagination.Page,
|
|
|
Total: int32(count),
|
|
|
PageSize: req.Pagination.PageSize,
|
|
|
- List: model.SystemRoleSlice(systemRoleList).ToPB(permissionsMenuMap),
|
|
|
+ List: model.SystemRoleSlice(systemRoleList).ToPB(nil),
|
|
|
},
|
|
|
}, nil
|
|
|
}
|
|
@@ -531,122 +511,64 @@ func (s *StoreEntry) GetRolePermissions(ctx context.Context, roleId int64) (*ope
|
|
|
return s.AllPermissionsListToRolePermissions(systemAllPermissionsList), nil
|
|
|
}
|
|
|
|
|
|
-// CreateSystemMenu 添加系统菜单权限
|
|
|
-func (s *StoreEntry) CreateSystemMenu(ctx context.Context, req *operationPb.AddMenuRequest) error {
|
|
|
- systemMenu := model.NewSystemMenu(req)
|
|
|
- if err := s.DB.Create(systemMenu).Error; err != nil {
|
|
|
- return xerr.WithStack(err)
|
|
|
- }
|
|
|
- return nil
|
|
|
-}
|
|
|
-
|
|
|
-// EditSystemMenu 编辑系统菜单权限
|
|
|
-func (s *StoreEntry) EditSystemMenu(ctx context.Context, req *operationPb.AddMenuRequest) error {
|
|
|
- systemMenu := &model.SystemMenu{Id: int64(req.Id)}
|
|
|
- if err := s.DB.First(systemMenu).Error; err != nil {
|
|
|
- if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
- return xerr.Custom("该数据不存在!")
|
|
|
- }
|
|
|
- return xerr.WithStack(err)
|
|
|
- }
|
|
|
-
|
|
|
- updateData := &model.SystemMenu{
|
|
|
- Name: req.Name,
|
|
|
- MenuType: req.MenuType,
|
|
|
- Title: req.Title,
|
|
|
- Path: req.Path,
|
|
|
- Component: req.Component,
|
|
|
- Icon: req.Icon,
|
|
|
- Sort: req.Sort,
|
|
|
- Redirect: req.Redirect,
|
|
|
- ParentId: int64(req.ParentId),
|
|
|
- }
|
|
|
-
|
|
|
- if err := s.DB.Model(new(model.SystemMenu)).Omit("is_show").
|
|
|
- Where("id = ?", systemMenu.Id).
|
|
|
- Updates(updateData).Error; err != nil {
|
|
|
- return xerr.WithStack(err)
|
|
|
- }
|
|
|
-
|
|
|
- return nil
|
|
|
-}
|
|
|
+// CreateOrUpdateSystemMenu 添加或者更新系统菜单权限
|
|
|
+func (s *StoreEntry) CreateOrUpdateSystemMenu(ctx context.Context, req *pasturePb.SearchMenuRequest) error {
|
|
|
+ if req.Id > 0 {
|
|
|
|
|
|
-// IsShowSystemMenu 菜单是否启用
|
|
|
-func (s *StoreEntry) IsShowSystemMenu(ctx context.Context, req *operationPb.IsShowSystemMenuRequest) error {
|
|
|
- systemMenu := &model.SystemMenu{Id: int64(req.MenuId)}
|
|
|
- if err := s.DB.First(systemMenu).Error; err != nil {
|
|
|
- if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
- return xerr.Custom("该数据不存在")
|
|
|
- }
|
|
|
- return xerr.WithStack(err)
|
|
|
}
|
|
|
|
|
|
- if err := s.DB.Model(systemMenu).Update("is_show", req.IsShow).Error; err != nil {
|
|
|
+ if err := s.DB.Model(&model.SystemMenu{}).Where(map[string]interface{}{
|
|
|
+ "id": req.Id,
|
|
|
+ }).Assign(map[string]interface{}{
|
|
|
+ "name": req.Name,
|
|
|
+ "path": req.Path,
|
|
|
+ "title": req.Title,
|
|
|
+ "menu_type": req.MenuType,
|
|
|
+ "parent_id": req.ParentId,
|
|
|
+ "frame_src": req.FrameSrc,
|
|
|
+ "frame_loading": model.BooleanToIsShow(req.FrameLoading),
|
|
|
+ "keepalive": model.BooleanToIsShow(req.Keepalive),
|
|
|
+ "hidden_tag": model.BooleanToIsShow(req.HiddenTag),
|
|
|
+ "show_link": model.BooleanToIsShow(req.ShowLink),
|
|
|
+ "show_parent": model.BooleanToIsShow(req.ShowParent),
|
|
|
+ "icon": req.Icon,
|
|
|
+ "component": req.Component,
|
|
|
+ "redirect": req.Redirect,
|
|
|
+ "auths": req.Auths,
|
|
|
+ "rank": req.Rank,
|
|
|
+ "extra_icon": req.ExtraIcon,
|
|
|
+ "enter_transition": req.EnterTransition,
|
|
|
+ "leave_transition": req.LeaveTransition,
|
|
|
+ "active_path": req.ActivePath,
|
|
|
+ "is_delete": pasturePb.IsShow_Ok,
|
|
|
+ "is_show": pasturePb.IsShow_Ok,
|
|
|
+ }).FirstOrCreate(&model.SystemMenu{}).Error; err != nil {
|
|
|
return xerr.WithStack(err)
|
|
|
}
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
// SearchSystemMenuList 菜单列表查询
|
|
|
-func (s *StoreEntry) SearchSystemMenuList(ctx context.Context, req *operationPb.SearchMenuRequest) (*operationPb.SearchMenuResponse, error) {
|
|
|
- systemMenuLevel1 := make([]*model.SystemMenu, 0)
|
|
|
+func (s *StoreEntry) SearchSystemMenuList(ctx context.Context, req *pasturePb.SearchMenuRequest) (*pasturePb.SearchMenuResponse, error) {
|
|
|
+ systemMenuList := make([]*model.SystemMenu, 0)
|
|
|
var count int64 = 0
|
|
|
|
|
|
- pref := s.DB.Model(new(model.SystemMenu)).Where("is_delete = ? and level = ?", operationPb.IsShow_OK, model.Level1)
|
|
|
- if req.Name != "" {
|
|
|
- pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
|
|
|
- }
|
|
|
-
|
|
|
- if err := pref.Order("sort desc").Count(&count).Limit(int(req.Pagination.PageSize)).Offset(int(req.Pagination.PageOffset)).
|
|
|
- Find(&systemMenuLevel1).Debug().Error; err != nil {
|
|
|
+ if err := s.DB.Model(new(model.SystemMenu)).Where("is_delete = ? ", operationPb.IsShow_OK).Order("parent_id").Count(&count).Find(&systemMenuList).Error; err != nil {
|
|
|
return nil, xerr.WithStack(err)
|
|
|
}
|
|
|
|
|
|
- systemMenuLevel1 = append(systemMenuLevel1, s.searchMenuLevel23ByLevel1(ctx, systemMenuLevel1)...)
|
|
|
- return &operationPb.SearchMenuResponse{
|
|
|
- Code: http.StatusOK,
|
|
|
- Msg: "ok",
|
|
|
- Data: &operationPb.SearchMenuData{
|
|
|
- Page: req.Pagination.Page,
|
|
|
- Total: int32(count),
|
|
|
- List: model.SystemMenuSlice(systemMenuLevel1).ToPB(),
|
|
|
+ return &pasturePb.SearchMenuResponse{
|
|
|
+ Code: http.StatusOK,
|
|
|
+ Message: "ok",
|
|
|
+ Data: &pasturePb.SearchMenuData{
|
|
|
+ Page: req.Pagination.Page,
|
|
|
+ Total: int32(count),
|
|
|
+ PageSize: req.Pagination.PageSize,
|
|
|
+ List: model.SystemMenuSlice(systemMenuList).ToPB(),
|
|
|
},
|
|
|
}, nil
|
|
|
}
|
|
|
|
|
|
-// searchMenuLevel23ByLevel1 根据一级菜单返回对应二三级菜单
|
|
|
-func (s *StoreEntry) searchMenuLevel23ByLevel1(ctx context.Context, res []*model.SystemMenu) []*model.SystemMenu {
|
|
|
- systemMenuLevel23 := make([]*model.SystemMenu, 0)
|
|
|
- if len(res) <= 0 {
|
|
|
- return systemMenuLevel23
|
|
|
- }
|
|
|
-
|
|
|
- ids1 := make([]int64, 0)
|
|
|
- for _, v := range res {
|
|
|
- ids1 = append(ids1, v.Id)
|
|
|
- }
|
|
|
- if err := s.DB.Model(new(model.SystemMenu)).Where("is_delete = ? and level = ?", operationPb.IsShow_OK, model.Level2).
|
|
|
- Where("parent_id IN ?", ids1).Order("sort desc").
|
|
|
- Find(&systemMenuLevel23).Error; err != nil {
|
|
|
- return systemMenuLevel23
|
|
|
- }
|
|
|
- ids2 := make([]int64, 0)
|
|
|
- for _, v := range systemMenuLevel23 {
|
|
|
- ids2 = append(ids2, v.Id)
|
|
|
- }
|
|
|
- systemMenuLevel3 := make([]*model.SystemMenu, 0)
|
|
|
- if err := s.DB.Model(new(model.SystemMenu)).Where("is_delete = ? and level = ?", operationPb.IsShow_OK, model.Level3).
|
|
|
- Where("parent_id IN ?", ids2).Order("sort desc").
|
|
|
- Find(&systemMenuLevel3).Error; err != nil {
|
|
|
- return systemMenuLevel23
|
|
|
- }
|
|
|
- if len(systemMenuLevel3) > 0 {
|
|
|
- systemMenuLevel23 = append(systemMenuLevel23, systemMenuLevel3...)
|
|
|
- }
|
|
|
-
|
|
|
- return systemMenuLevel23
|
|
|
-}
|
|
|
-
|
|
|
// DeleteSystemMenu 删除系统菜单
|
|
|
func (s *StoreEntry) DeleteSystemMenu(ctx context.Context, menuId int64) error {
|
|
|
systemMenu := &model.SystemMenu{Id: menuId}
|
|
@@ -657,7 +579,7 @@ func (s *StoreEntry) DeleteSystemMenu(ctx context.Context, menuId int64) error {
|
|
|
return xerr.WithStack(err)
|
|
|
}
|
|
|
|
|
|
- if err := s.DB.Model(systemMenu).Update("is_delete", operationPb.IsShow_NO).Error; err != nil {
|
|
|
+ if err := s.DB.Model(systemMenu).Update("is_delete", pasturePb.IsShow_No).Error; err != nil {
|
|
|
return xerr.WithStack(err)
|
|
|
}
|
|
|
return nil
|