Procházet zdrojové kódy

system: 用户角色相关

Yi před 11 měsíci
rodič
revize
3bb1dfb67e

+ 1 - 1
go.mod

@@ -3,7 +3,7 @@ module kpt-pasture
 go 1.17
 
 require (
-	gitee.com/xuyiping_admin/go_proto v0.0.0-20240403094850-f22ea147d1c9
+	gitee.com/xuyiping_admin/go_proto v0.0.0-20240407084244-eed4fd8a4a34
 	gitee.com/xuyiping_admin/pkg v0.0.0-20231218082641-aac597b8a015
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible
 	github.com/getsentry/sentry-go v0.23.0

+ 16 - 0
go.sum

@@ -76,6 +76,22 @@ gitee.com/xuyiping_admin/go_proto v0.0.0-20240403064536-d1d49348948f h1:HAPmtD2t
 gitee.com/xuyiping_admin/go_proto v0.0.0-20240403064536-d1d49348948f/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20240403094850-f22ea147d1c9 h1:d8nMoLa+sKKuRgAGs/0W4Yez8Kr1NRTjlWYvn0Fh+Do=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20240403094850-f22ea147d1c9/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240407022124-05c16c77f50e h1:hLF5c9dLIW1kyHe3UDrVcz0aqSR7WjH3fid8/jFN45I=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240407022124-05c16c77f50e/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240407025431-5cdf63d8262f h1:rgJUnrAsrboDQYKB8tNZwaQSp8/nAVz0pZ6j1xTjQso=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240407025431-5cdf63d8262f/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240407025925-b8805ed7757b h1:GhKmsFEsftI4pLpcsxdAZawG7jn5a79nHXyhiJ/3qWg=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240407025925-b8805ed7757b/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240407061540-774438d0c837 h1:BMF1g/Q2IxVfrZr4HuMulEn3kYSXQ4iNZO+0Lw+Duno=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240407061540-774438d0c837/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240407070129-177a64732e58 h1:OwHjE+Be7S5aRvM5pmE8TOq/n7N6P6pExNv+ffEYx7Q=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240407070129-177a64732e58/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240407073803-7c0280de634d h1:HDXAdrUjMnTm6vOn0W1f+bH1OT0ni5gLPU3cwzIVWJs=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240407073803-7c0280de634d/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240407075741-0bae8f479fb6 h1:REB46lI18Mj668qLw/oKQ+wEYSHiSJifHsUTtElYqO8=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240407075741-0bae8f479fb6/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240407084244-eed4fd8a4a34 h1:86om/+9gKt1rJKSc1ZyttwMVTsUxAlJgY2Cm5tunsv8=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240407084244-eed4fd8a4a34/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
 gitee.com/xuyiping_admin/pkg v0.0.0-20231218082641-aac597b8a015 h1:dfb5dRd57L2HKjdwLT93UFmPYFPOmEl56gtZmqcNnaE=
 gitee.com/xuyiping_admin/pkg v0.0.0-20231218082641-aac597b8a015/go.mod h1:Fk4GYI/v0IK3XFrm1Gn+VkgCz5Y7mfswD5hsTJYOG6A=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=

+ 10 - 0
http/handler/system/menu.go

@@ -87,3 +87,13 @@ func DeleteSystemMenu(c *gin.Context) {
 		Data: &operationPb.Success{Success: true},
 	})
 }
+
+// GetSystemMenuTree 角色菜单
+func GetSystemMenuTree(c *gin.Context) {
+	res, err := middleware.Dependency(c).StoreEventHub.OpsService.SystemMenuTree(c)
+	if err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+	ginutil.JSONResp(c, res)
+}

+ 39 - 4
http/handler/system/role.go

@@ -40,9 +40,9 @@ func RoleCreateOrUpdate(c *gin.Context) {
 	})
 }
 
-// GetRolePermissions 获取角色对应的权限
-func GetRolePermissions(c *gin.Context) {
-	roleIdStr := c.Param("role_id")
+// GetRoleMenu 获取角色对应的菜单
+func GetRoleMenu(c *gin.Context) {
+	roleIdStr := c.Param("id")
 	roleId, _ := strconv.Atoi(roleIdStr)
 
 	if err := valid.Validate(roleId, valid.Required, valid.Min(1)); err != nil {
@@ -50,7 +50,7 @@ func GetRolePermissions(c *gin.Context) {
 		return
 	}
 
-	res, err := middleware.BackendOperation(c).OpsService.GetRolePermissions(c, int64(roleId))
+	res, err := middleware.BackendOperation(c).OpsService.GetRoleMenuList(c, int64(roleId))
 	if err != nil {
 		apierr.ClassifiedAbort(c, err)
 		return
@@ -123,3 +123,38 @@ func SearchSystemRoleList(c *gin.Context) {
 	}
 	ginutil.JSONResp(c, res)
 }
+
+func RoleMenuSave(c *gin.Context) {
+	var req pasturePb.SystemRoleMenuRequest
+	if err := ginutil.BindProto(c, &req); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	if err := valid.ValidateStruct(&req,
+		valid.Field(&req.RoleId, valid.Required),
+		valid.Field(&req.MenuIds, valid.Required),
+	); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	if err := middleware.Dependency(c).StoreEventHub.OpsService.RoleMenuSave(c, &req); err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+	ginutil.JSONResp(c, &operationPb.CommonOK{
+		Code: http.StatusOK,
+		Msg:  "ok",
+		Data: &operationPb.Success{Success: true},
+	})
+}
+
+func GetRoleList(c *gin.Context) {
+	res, err := middleware.Dependency(c).StoreEventHub.OpsService.SystemRoleList(c)
+	if err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+	ginutil.JSONResp(c, res)
+}

+ 92 - 46
http/handler/system/user.go

@@ -66,41 +66,6 @@ func UserCreateOrUpdate(c *gin.Context) {
 	})
 }
 
-// DetailsSystemUser 系统用户详情
-func DetailsSystemUser(c *gin.Context) {
-	userIdStr := c.Param("user_id")
-	userId, _ := strconv.Atoi(userIdStr)
-
-	if err := valid.Validate(userId, valid.Required, valid.Min(1)); err != nil {
-		apierr.ClassifiedAbort(c, err)
-		return
-	}
-
-	res, err := middleware.BackendOperation(c).OpsService.DetailsSystemUser(c, int64(userId))
-	if err != nil {
-		apierr.ClassifiedAbort(c, err)
-		return
-	}
-
-	ginutil.JSONResp(c, res)
-}
-
-// GetUserInfo 获取用户信息
-func GetUserInfo(c *gin.Context) {
-	token := middleware.GetToken(c)
-	if err := valid.Validate(token, valid.Required); err != nil {
-		apierr.ClassifiedAbort(c, err)
-		return
-	}
-
-	res, err := middleware.BackendOperation(c).OpsService.GetUserInfo(c, token)
-	if err != nil {
-		apierr.ClassifiedAbort(c, err)
-		return
-	}
-	ginutil.JSONResp(c, res)
-}
-
 // SearchSystemUserList 查询系统用户列表
 func SearchSystemUserList(c *gin.Context) {
 	var req pasturePb.SearchUserRequest
@@ -172,15 +137,45 @@ func IsShowSystemUser(c *gin.Context) {
 	})
 }
 
-// GetSystemUserPermissions 获取系统用户菜单权限
-func GetSystemUserPermissions(c *gin.Context) {
-	token := middleware.GetToken(c)
-	if err := valid.Validate(token, valid.Required); err != nil {
+// ResetPasswordSystemUser 用户密码重置
+func ResetPasswordSystemUser(c *gin.Context) {
+	var req pasturePb.ResetUserPasswordRequest
+	if err := ginutil.BindProto(c, &req); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	if err := valid.ValidateStruct(&req,
+		valid.Field(&req.Id, valid.Required),
+		valid.Field(&req.Password, valid.Required),
+	); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	if err := middleware.BackendOperation(c).OpsService.ResetPasswordSystemUser(c, &req); err != nil {
 		apierr.ClassifiedAbort(c, err)
 		return
 	}
 
-	res, err := middleware.BackendOperation(c).OpsService.GetSystemUserPermissions(c, token)
+	ginutil.JSONResp(c, &operationPb.CommonOK{
+		Code: http.StatusOK,
+		Msg:  "ok",
+		Data: &operationPb.Success{Success: true},
+	})
+}
+
+// UserRole 获取系统用户角色
+func UserRole(c *gin.Context) {
+	userIdStr := c.Param("user_id")
+	userId, _ := strconv.Atoi(userIdStr)
+
+	if err := valid.Validate(userId, valid.Required, valid.Min(1)); err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+
+	res, err := middleware.BackendOperation(c).OpsService.SystemUserRole(c, int64(userId))
 	if err != nil {
 		apierr.ClassifiedAbort(c, err)
 		return
@@ -188,23 +183,23 @@ func GetSystemUserPermissions(c *gin.Context) {
 	ginutil.JSONResp(c, res)
 }
 
-// ResetPasswordSystemUser 用户密码重置
-func ResetPasswordSystemUser(c *gin.Context) {
-	var req pasturePb.ResetUserPasswordRequest
+// UserRoleSave 更新系统用户角色
+func UserRoleSave(c *gin.Context) {
+	var req pasturePb.SystemUserRoleRequest
 	if err := ginutil.BindProto(c, &req); err != nil {
 		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
 		return
 	}
 
 	if err := valid.ValidateStruct(&req,
-		valid.Field(&req.Id, valid.Required),
-		valid.Field(&req.Password, valid.Required),
+		valid.Field(&req.UserId, valid.Required),
+		valid.Field(&req.RoleId, valid.Required),
 	); err != nil {
 		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
 		return
 	}
 
-	if err := middleware.BackendOperation(c).OpsService.ResetPasswordSystemUser(c, &req); err != nil {
+	if err := middleware.BackendOperation(c).OpsService.SystemUserRoleSave(c, &req); err != nil {
 		apierr.ClassifiedAbort(c, err)
 		return
 	}
@@ -216,6 +211,57 @@ func ResetPasswordSystemUser(c *gin.Context) {
 	})
 }
 
+// DetailsSystemUser 系统用户详情
+func DetailsSystemUser(c *gin.Context) {
+	userIdStr := c.Param("user_id")
+	userId, _ := strconv.Atoi(userIdStr)
+
+	if err := valid.Validate(userId, valid.Required, valid.Min(1)); err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+
+	res, err := middleware.BackendOperation(c).OpsService.DetailsSystemUser(c, int64(userId))
+	if err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+
+	ginutil.JSONResp(c, res)
+}
+
+// GetUserInfo 获取用户信息
+func GetUserInfo(c *gin.Context) {
+	token := middleware.GetToken(c)
+	if err := valid.Validate(token, valid.Required); err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+
+	res, err := middleware.BackendOperation(c).OpsService.GetUserInfo(c, token)
+	if err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+	ginutil.JSONResp(c, res)
+}
+
+// GetSystemUserPermissions 获取系统用户菜单权限
+func GetSystemUserPermissions(c *gin.Context) {
+	token := middleware.GetToken(c)
+	if err := valid.Validate(token, valid.Required); err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+
+	res, err := middleware.BackendOperation(c).OpsService.GetSystemUserPermissions(c, token)
+	if err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+	ginutil.JSONResp(c, res)
+}
+
 // LogoutSystemUser 用户登出,
 func LogoutSystemUser(c *gin.Context) {
 	ginutil.JSONResp(c, &operationPb.CommonOK{

+ 6 - 2
http/route/system_api.go

@@ -26,6 +26,8 @@ func SystemAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		systemRoute.DELETE("/user/:id", system.DeleteUser)
 		systemRoute.POST("/user/createOrUpdate", system.UserCreateOrUpdate)
 		systemRoute.POST("/user/rest/password", system.ResetPasswordSystemUser)
+		systemRoute.GET("/user/role/:user_id", system.UserRole)
+		systemRoute.POST("/user/role/save", system.UserRoleSave)
 
 		systemRoute.POST("/user_info", system.GetUserInfo)
 		systemRoute.GET("/user/details/:user_id", system.DetailsSystemUser)
@@ -37,13 +39,15 @@ func SystemAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		systemRoute.DELETE("/role/:id", system.DeleteSystemRole)
 		systemRoute.PUT("/role/is_show/:id", system.IsShowSystemRole)
 		systemRoute.POST("/role/createOrUpdate", system.RoleCreateOrUpdate)
-
-		systemRoute.GET("/role/permissions/:role_id", system.GetRolePermissions)
+		systemRoute.GET("/role/menu/:id", system.GetRoleMenu)
+		systemRoute.POST("/role/menu/save", system.RoleMenuSave)
+		systemRoute.GET("/role/list", system.GetRoleList)
 
 		// 系统菜单权限
 		systemRoute.POST("/menu/list", system.SearchSystemMenuList)
 		systemRoute.DELETE("/menu/:id", system.DeleteSystemMenu)
 		systemRoute.POST("/menu/createOrUpdate", system.CreatedOrUpdateSystemMenu)
+		systemRoute.POST("/menu/tree", system.GetSystemMenuTree)
 
 		// 系统部门
 		systemRoute.POST("/dept/list", system.DeptList)

+ 0 - 28
model/system_menu_permissions.go

@@ -1,28 +0,0 @@
-package model
-
-import operationPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/operation"
-
-type SystemMenuPermissions struct {
-	Id        int64                   `json:"id,omitempty"`
-	RoleId    int64                   `json:"role_id"`
-	MenuId    int64                   `json:"menu_id"`
-	IsShow    operationPb.IsShow_Kind `json:"is_show"`
-	CreatedAt int64                   `json:"created_at"`
-	UpdatedAt int64                   `json:"updated_at"`
-}
-
-func (s *SystemMenuPermissions) TableName() string {
-	return "system_menu_permissions"
-}
-
-func NewSystemMenuPermissions(roleID int64, menuIds []uint32) []*SystemMenuPermissions {
-	systemMenuPermissions := make([]*SystemMenuPermissions, len(menuIds))
-	for i, v := range menuIds {
-		systemMenuPermissions[i] = &SystemMenuPermissions{
-			RoleId: roleID,
-			MenuId: int64(v),
-			IsShow: operationPb.IsShow_OK,
-		}
-	}
-	return systemMenuPermissions
-}

+ 1 - 1
model/system_role.go

@@ -37,7 +37,7 @@ func NewSystemRole(req *operationPb.AddRoleRequest) *SystemRole {
 
 type SystemRoleSlice []*SystemRole
 
-func (s SystemRoleSlice) ToPB(systemMenuList map[int64][]*SystemMenu) []*pasturePb.SearchRoleRequest {
+func (s SystemRoleSlice) ToPB() []*pasturePb.SearchRoleRequest {
 	res := make([]*pasturePb.SearchRoleRequest, len(s))
 	for i, v := range s {
 		res[i] = &pasturePb.SearchRoleRequest{

+ 34 - 0
model/system_role_menu.go

@@ -0,0 +1,34 @@
+package model
+
+type SystemRoleMenu struct {
+	Id        int64 `json:"id"`
+	RoleId    int64 `json:"role_id"`
+	MenuId    int64 `json:"menu_id"`
+	CreatedAt int64 `json:"created_at"`
+	UpdatedAt int64 `json:"updated_at"`
+}
+
+func (s *SystemRoleMenu) TableName() string {
+	return "system_role_menu"
+}
+
+func NewSystemMenuPermissions(roleID int64, menuIds []uint32) []*SystemRoleMenu {
+	systemRoleMenu := make([]*SystemRoleMenu, len(menuIds))
+	for i, v := range menuIds {
+		systemRoleMenu[i] = &SystemRoleMenu{
+			RoleId: roleID,
+			MenuId: int64(v),
+		}
+	}
+	return systemRoleMenu
+}
+
+type SystemRoleMenuSlice []*SystemRoleMenu
+
+func (s SystemRoleMenuSlice) ToPB() []int32 {
+	var menuIds []int32
+	for _, v := range s {
+		menuIds = append(menuIds, int32(v.MenuId))
+	}
+	return menuIds
+}

+ 6 - 2
module/backend/interface.go

@@ -54,6 +54,8 @@ type SystemService interface {
 	DeleteSystemUser(ctx context.Context, userId int64) error
 	SystemUserCreateOrUpdate(ctx context.Context, req *pasturePb.SearchUserRequest) error
 	ResetPasswordSystemUser(ctx context.Context, req *pasturePb.ResetUserPasswordRequest) error
+	SystemUserRole(ctx context.Context, userId int64) (*pasturePb.SystemUserRoleResponse, error)
+	SystemUserRoleSave(ctx context.Context, req *pasturePb.SystemUserRoleRequest) error
 
 	GetCurrentUserName(ctx context.Context) (string, error)
 	GetUserInfo(ctx context.Context, token string) (*operationPb.UserAuth, error)
@@ -65,13 +67,15 @@ type SystemService interface {
 	DeleteSystemRole(ctx context.Context, roleId int64) error
 	IsShowSystemRole(ctx context.Context, roleId int64) error
 	SystemRoleCreateOrUpdate(ctx context.Context, req *pasturePb.SearchRoleRequest) error
-
-	GetRolePermissions(ctx context.Context, roleId int64) (*operationPb.RolePermissionsList, error)
+	GetRoleMenuList(ctx context.Context, roleId int64) (*pasturePb.SystemRoleMenuResponse, error)
+	RoleMenuSave(ctx context.Context, res *pasturePb.SystemRoleMenuRequest) error
+	SystemRoleList(ctx context.Context) (*pasturePb.GetRoleListResponse, error)
 
 	// SearchSystemMenuList 系统菜单权限
 	SearchSystemMenuList(ctx context.Context, req *pasturePb.SearchMenuRequest) (*pasturePb.SearchMenuResponse, error)
 	DeleteSystemMenu(ctx context.Context, menuId int64) error
 	CreateOrUpdateSystemMenu(ctx context.Context, req *pasturePb.SearchMenuRequest) error
+	SystemMenuTree(ctx context.Context) (*pasturePb.SystemMenuTreeResponse, error)
 
 	// SearchSystemDeptList 部门列表
 	SearchSystemDeptList(ctx context.Context, req *pasturePb.SearchDeptRequest) (*pasturePb.SearchDeptResponse, error)

+ 11 - 35
module/backend/system_permissions.go

@@ -2,39 +2,21 @@ package backend
 
 import (
 	"context"
+	"kpt-pasture/model"
+
 	operationPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/operation"
 	"gitee.com/xuyiping_admin/pkg/logger/zaplog"
 	"gitee.com/xuyiping_admin/pkg/xerr"
 	"go.uber.org/zap"
-	"kpt-pasture/model"
-	"net/http"
 )
 
 type SystemAllPermissionsList struct {
-	MenuList []*model.SystemMenuPermissions
-}
-
-func (s *StoreEntry) AllPermissionsListToRolePermissions(req *SystemAllPermissionsList) *operationPb.RolePermissionsList {
-	res := &operationPb.RolePermissionsList{
-		Code: http.StatusOK,
-		Msg:  "ok",
-		Data: &operationPb.RolePermissionsData{
-			MobileList:  make([]uint32, 0),
-			MenuList:    make([]uint32, 0),
-			PastureList: make([]uint32, 0),
-		},
-	}
-
-	for _, v := range req.MenuList {
-		res.Data.MenuList = append(res.Data.MenuList, uint32(v.MenuId))
-	}
-
-	return res
+	MenuList []*model.SystemRoleMenu
 }
 
 // SystemUserMenuPermissionsUnDuplicate 角色权限去重
 func (s *SystemAllPermissionsList) SystemUserMenuPermissionsUnDuplicate() {
-	newMenuList := make([]*model.SystemMenuPermissions, 0)
+	newMenuList := make([]*model.SystemRoleMenu, 0)
 	seen := make(map[int64]bool)
 	for _, menu := range s.MenuList {
 		if _, ok := seen[menu.MenuId]; !ok {
@@ -44,23 +26,17 @@ func (s *SystemAllPermissionsList) SystemUserMenuPermissionsUnDuplicate() {
 	s.MenuList = newMenuList
 }
 
-// GetSystemAllPermissionsList 获取用户相关权限
-func (s *StoreEntry) GetSystemAllPermissionsList(ctx context.Context, roleId int64) *SystemAllPermissionsList {
-	systemAllPermissionsList := &SystemAllPermissionsList{
-		MenuList: make([]*model.SystemMenuPermissions, 0),
+// GetSystemRoleMenuList 获取角色相关菜单
+func (s *StoreEntry) GetSystemRoleMenuList(ctx context.Context, roleId int64) []*model.SystemRoleMenu {
+	menuList := make([]*model.SystemRoleMenu, 0)
+	if err := s.DB.Where("role_id = ?", roleId).Find(&menuList).Error; err != nil {
+		zaplog.Error("GetSystemRoleMenuList", zap.Any("Err", err))
 	}
-
-	menuList := make([]*model.SystemMenuPermissions, 0)
-	if err := s.DB.Where("role_id = ? and is_show = ?", roleId, operationPb.IsShow_OK).Find(&menuList).Error; err != nil {
-		zaplog.Error("SystemMenuPermissions", zap.Any("Err", err))
-	}
-	systemAllPermissionsList.MenuList = menuList
-
-	return systemAllPermissionsList
+	return menuList
 }
 
 // GetMenuList 获取******
-func (s *StoreEntry) GetMenuList(ctx context.Context, req []*model.SystemMenuPermissions) ([]*model.SystemMenu, error) {
+func (s *StoreEntry) GetMenuList(ctx context.Context, req []*model.SystemRoleMenu) ([]*model.SystemMenu, error) {
 	ids := make([]int64, 0)
 	for _, v := range req {
 		ids = append(ids, v.MenuId)

+ 149 - 54
module/backend/system_service.go

@@ -9,6 +9,8 @@ import (
 	"net/http"
 	"time"
 
+	"gitee.com/xuyiping_admin/pkg/logger/zaplog"
+
 	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"
@@ -146,36 +148,6 @@ func (s *StoreEntry) IsShowSystemUser(ctx context.Context, userId int64) error {
 	return nil
 }
 
-// GetCurrentUserName 获取当前用户名
-func (s *StoreEntry) GetCurrentUserName(ctx context.Context) (string, error) {
-	userNameInter := ctx.Value(CurrentUserName)
-	if userNameInter == nil {
-		return "", xerr.Customf("cannot userName")
-	}
-
-	if userName, ok := userNameInter.(string); ok {
-		return userName, nil
-	} else {
-		return "", xerr.Customf("waring userName")
-	}
-}
-
-// GetUserInfo 获取用户信息
-func (s *StoreEntry) GetUserInfo(ctx context.Context, token string) (*operationPb.UserAuth, error) {
-	systemUser := &model.SystemUser{}
-	userName, err := s.GetCurrentUserName(ctx)
-	if err != nil {
-		return nil, xerr.WithStack(err)
-	}
-
-	if err = s.DB.Where("name = ?", userName).First(systemUser).Error; err != nil {
-		return nil, xerr.WithStack(err)
-	}
-
-	systemRole := make([]*model.SystemRole, 0)
-	return systemUser.SystemUserFormat(systemRole, nil), nil
-}
-
 // SystemUserCreateOrUpdate 创建或者更新系统用户
 func (s *StoreEntry) SystemUserCreateOrUpdate(ctx context.Context, req *pasturePb.SearchUserRequest) error {
 	if req.Id > 0 {
@@ -222,6 +194,74 @@ func (s *StoreEntry) ResetPasswordSystemUser(ctx context.Context, req *pasturePb
 	return nil
 }
 
+func (s *StoreEntry) SystemUserRole(ctx context.Context, userId int64) (*pasturePb.SystemUserRoleResponse, error) {
+	systemUser := &model.SystemUser{Id: userId}
+	if err := s.DB.First(systemUser).Error; err != nil {
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return nil, xerr.Custom("该用户不存在")
+		}
+		return nil, xerr.WithStack(err)
+	}
+
+	return &pasturePb.SystemUserRoleResponse{
+		Code:    http.StatusOK,
+		Message: "ok",
+		Data:    int32(systemUser.RoleId),
+	}, nil
+}
+
+func (s *StoreEntry) SystemUserRoleSave(ctx context.Context, req *pasturePb.SystemUserRoleRequest) error {
+	systemUser := &model.SystemUser{Id: int64(req.UserId)}
+	if err := s.DB.First(systemUser).Error; err != nil {
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return xerr.Custom("该用户不存在")
+		}
+		return xerr.WithStack(err)
+	}
+
+	systemRole := &model.SystemRole{Id: int64(req.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.Model(systemUser).Update("role_id", systemRole.Id).Error; err != nil {
+		return xerr.WithStack(err)
+	}
+	return nil
+}
+
+// GetCurrentUserName 获取当前用户名
+func (s *StoreEntry) GetCurrentUserName(ctx context.Context) (string, error) {
+	userNameInter := ctx.Value(CurrentUserName)
+	if userNameInter == nil {
+		return "", xerr.Customf("cannot userName")
+	}
+
+	if userName, ok := userNameInter.(string); ok {
+		return userName, nil
+	} else {
+		return "", xerr.Customf("waring userName")
+	}
+}
+
+// GetUserInfo 获取用户信息
+func (s *StoreEntry) GetUserInfo(ctx context.Context, token string) (*operationPb.UserAuth, error) {
+	systemUser := &model.SystemUser{}
+	userName, err := s.GetCurrentUserName(ctx)
+	if err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
+	if err = s.DB.Where("name = ?", userName).First(systemUser).Error; err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
+	systemRole := make([]*model.SystemRole, 0)
+	return systemUser.SystemUserFormat(systemRole, nil), nil
+}
+
 // DetailsSystemUser 系统用户详情
 func (s *StoreEntry) DetailsSystemUser(ctx context.Context, userId int64) (*operationPb.UserDetails, error) {
 	systemUser := &model.SystemUser{
@@ -265,12 +305,13 @@ func (s *StoreEntry) GetSystemUserPermissions(ctx context.Context, token string)
 	}
 
 	systemAllPermissionsList := &SystemAllPermissionsList{
-		MenuList: make([]*model.SystemMenuPermissions, 0),
+		MenuList: make([]*model.SystemRoleMenu, 0),
 	}
 
 	for _, role := range systemRoles {
-		item := s.GetSystemAllPermissionsList(ctx, role.Id)
-		systemAllPermissionsList.MenuList = append(systemAllPermissionsList.MenuList, item.MenuList...)
+		zaplog.Info(role.Name)
+		/*item := s.GetSystemRoleMenuList(ctx, role.Id)
+		systemAllPermissionsList.MenuList = append(systemAllPermissionsList.MenuList, item.MenuList...)*/
 	}
 
 	systemAllPermissionsList.SystemUserMenuPermissionsUnDuplicate()
@@ -453,19 +494,6 @@ func (s *StoreEntry) SearchSystemRoleList(ctx context.Context, req *pasturePb.Se
 		return nil, xerr.WithStack(err)
 	}
 
-	/*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())).
-			Joins(fmt.Sprintf("left join %s on %s = %s and %s", new(model.SystemMenuPermissions).TableName(), fmt.Sprintf("%s.menu_id", new(model.SystemMenuPermissions).TableName()),
-				fmt.Sprintf("%s.id", new(model.SystemMenu).TableName()), fmt.Sprintf("%s.is_show = %d", new(model.SystemMenuPermissions).TableName(), operationPb.IsShow_OK))).
-			Where(fmt.Sprintf("%s.role_id = ?", new(model.SystemMenuPermissions).TableName()), role.Id).Where(fmt.Sprintf("%s.level = ?", new(model.SystemMenu).TableName()), model.Level2).
-			Find(&systemMenuList).Error; err != nil {
-			zaplog.Error("SearchSystemRoleList", zap.Any("SystemMenuPermissions", err))
-		}
-		permissionsMenuMap[role.Id] = systemMenuList
-	}*/
-
 	return &pasturePb.SearchRoleResponse{
 		Code:    http.StatusOK,
 		Message: "ok",
@@ -473,7 +501,7 @@ func (s *StoreEntry) SearchSystemRoleList(ctx context.Context, req *pasturePb.Se
 			Page:     req.Pagination.Page,
 			Total:    int32(count),
 			PageSize: req.Pagination.PageSize,
-			List:     model.SystemRoleSlice(systemRoleList).ToPB(nil),
+			List:     model.SystemRoleSlice(systemRoleList).ToPB(),
 		},
 	}, nil
 }
@@ -490,8 +518,8 @@ func (s *StoreEntry) SearchSystemRoleListByIds(ctx context.Context, ids []int64)
 	return systemRoleList, nil
 }
 
-// GetRolePermissions 查询系统角色权限
-func (s *StoreEntry) GetRolePermissions(ctx context.Context, roleId int64) (*operationPb.RolePermissionsList, error) {
+// GetRoleMenuList 查询系统角色对应的菜单数据
+func (s *StoreEntry) GetRoleMenuList(ctx context.Context, roleId int64) (*pasturePb.SystemRoleMenuResponse, error) {
 	systemRole := &model.SystemRole{
 		Id: roleId,
 	}
@@ -502,13 +530,67 @@ func (s *StoreEntry) GetRolePermissions(ctx context.Context, roleId int64) (*ope
 		return nil, xerr.WithStack(err)
 	}
 
-	systemAllPermissionsList := &SystemAllPermissionsList{
-		MenuList: make([]*model.SystemMenuPermissions, 0),
+	if systemRole.IsDelete == pasturePb.IsShow_No {
+		return nil, xerr.Custom("该数据已被删除")
+	}
+
+	item := s.GetSystemRoleMenuList(ctx, systemRole.Id)
+	return &pasturePb.SystemRoleMenuResponse{
+		Code:    http.StatusOK,
+		Message: "ok",
+		Data:    model.SystemRoleMenuSlice(item).ToPB(),
+	}, nil
+
+}
+
+// RoleMenuSave 保存系统角色对应的菜单数据
+func (s *StoreEntry) RoleMenuSave(ctx context.Context, res *pasturePb.SystemRoleMenuRequest) error {
+	if len(res.MenuIds) <= 0 {
+		return xerr.Custom("请选择菜单")
+	}
+	systemRole := &model.SystemRole{
+		Id: int64(res.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 {
+		if err := tx.Model(new(model.SystemRoleMenu)).Where("role_id = ?", systemRole.Id).Delete(&model.SystemRoleMenu{}).Error; err != nil {
+			return xerr.WithStack(err)
+		}
+		for _, menuId := range res.MenuIds {
+			if err := tx.Create(&model.SystemRoleMenu{
+				RoleId: systemRole.Id,
+				MenuId: int64(menuId),
+			}).Error; err != nil {
+				return xerr.WithStack(err)
+			}
+		}
+		return nil
+	}); err != nil {
+		return xerr.WithStack(err)
+	}
+	return nil
+}
+
+func (s *StoreEntry) SystemRoleList(ctx context.Context) (*pasturePb.GetRoleListResponse, error) {
+	systemRoleList := make([]*model.SystemRole, 0)
+	if err := s.DB.Model(new(model.SystemRole)).
+		Where("is_delete = ? and is_show = ?", pasturePb.IsShow_Ok, pasturePb.IsShow_Ok).
+		Find(&systemRoleList).Error; err != nil {
+		return nil, xerr.WithStack(err)
 	}
 
-	item := s.GetSystemAllPermissionsList(ctx, systemRole.Id)
-	systemAllPermissionsList.MenuList = append(systemAllPermissionsList.MenuList, item.MenuList...)
-	return s.AllPermissionsListToRolePermissions(systemAllPermissionsList), nil
+	return &pasturePb.GetRoleListResponse{
+		Code:    http.StatusOK,
+		Message: "ok",
+		Data:    model.SystemRoleSlice(systemRoleList).ToPB(),
+	}, nil
 }
 
 // CreateOrUpdateSystemMenu 添加或者更新系统菜单权限
@@ -548,6 +630,19 @@ func (s *StoreEntry) CreateOrUpdateSystemMenu(ctx context.Context, req *pastureP
 	return nil
 }
 
+func (s *StoreEntry) SystemMenuTree(ctx context.Context) (*pasturePb.SystemMenuTreeResponse, error) {
+	systemMenuList := make([]*model.SystemMenu, 0)
+	if err := s.DB.Model(new(model.SystemMenu)).Where("is_delete = ?", pasturePb.IsShow_Ok).
+		Where("is_show = ?", pasturePb.IsShow_Ok).Find(&systemMenuList).Error; err != nil {
+		return nil, xerr.WithStack(err)
+	}
+	return &pasturePb.SystemMenuTreeResponse{
+		Code:    http.StatusOK,
+		Message: "ok",
+		Data:    model.SystemMenuSlice(systemMenuList).ToPB(),
+	}, nil
+}
+
 // SearchSystemMenuList 菜单列表查询
 func (s *StoreEntry) SearchSystemMenuList(ctx context.Context, req *pasturePb.SearchMenuRequest) (*pasturePb.SearchMenuResponse, error) {
 	systemMenuList := make([]*model.SystemMenu, 0)