Browse Source

bug: bug1

Yi 1 year ago
parent
commit
4ace21df29

+ 3 - 0
backend/operation/system.proto

@@ -33,6 +33,9 @@ message AddRoleRequest {
   string create_user = 8;          // 创建用户
   uint32 created_at = 9;             // 创建时间
   string created_at_format = 10;     // 创建时间格式化
+
+  repeated string pasture_list = 11;   // 负责的牧场
+  repeated string menu_list = 12; // 权限列表
 }
 
 message SearchRoleRequest {

+ 1 - 50
http/route/app_api.go → http/route/ops_api.go

@@ -1,61 +1,19 @@
 package route
 
 import (
-	"kpt-tmr-group/http/handler"
 	"kpt-tmr-group/http/handler/dashboard"
 	"kpt-tmr-group/http/handler/feed"
-	"kpt-tmr-group/http/handler/mobile"
 	"kpt-tmr-group/http/handler/pasture"
 	"kpt-tmr-group/http/handler/statistic"
-	"kpt-tmr-group/http/handler/system"
-	"kpt-tmr-group/http/middleware"
 
 	"github.com/gin-gonic/gin"
 )
 
-func AppAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
+func OpsAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 	return func(s *gin.Engine) {
 		for _, opt := range opts {
 			opt(s)
 		}
-		// Not Found
-		s.NoRoute(handler.Handle404)
-		// Health Check
-		s.GET("/check", handler.Health)
-
-		s.POST("/auth", system.Auth)
-		s.GET("/wx_applet/openid/:js_code", system.GetWxAppletOpenId)
-
-		// system API 组
-		// 系统用户
-		systemRoute := authRouteGroup(s, "/api/v1/system/")
-		systemRoute.POST("/user_info", system.GetUserInfo)
-		systemRoute.POST("/user/add", system.AddSystemUser)
-		systemRoute.GET("/user/details/:user_id", system.DetailsSystemUser)
-		systemRoute.POST("/user/list", system.SearchSystemUserList)
-		systemRoute.POST("/user/edit", system.EditSystemUser)
-		systemRoute.POST("/user/is_show", system.IsShowSystemUser)
-		systemRoute.DELETE("/user/:user_id", system.DeleteUser)
-		systemRoute.POST("/user/permissions", system.GetSystemUserPermissions)
-		systemRoute.POST("/user/rest_password/:user_id", system.ResetPasswordSystemUser)
-		systemRoute.POST("/user/logout", system.LogoutSystemUser)
-
-		// 系统角色
-		systemRoute.POST("/role/add", system.AddSystemRole)
-		systemRoute.GET("/role/permissions/:role_id", system.GetRolePermissions)
-		systemRoute.POST("/role/edit", system.EditSystemRole)
-		systemRoute.DELETE("/role/:role_id", system.DeleteSystemRole)
-		systemRoute.POST("/role/list", system.SearchSystemRoleList)
-
-		// 系统菜单权限
-		systemRoute.POST("/menu/add", system.AddSystemMenu)
-		systemRoute.POST("/menu/edit", system.EditSystemMenu)
-		systemRoute.POST("/menu/is_show", system.IsShowSystemMenu)
-		systemRoute.POST("/menu/list", system.SearchSystemMenuList)
-		systemRoute.DELETE("/menu/:menu_id", system.DeleteSystemMenu)
-
-		// 移动端
-		systemRoute.POST("/mobile/list", mobile.SearchMobileList)
 
 		// 牧场管理
 		opsRoute := authRouteGroup(s, "/api/v1/ops/")
@@ -129,10 +87,3 @@ func AppAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		opsRoute.POST("/dashboard/sprinkle_time", dashboard.SprinkleFeedTime)
 	}
 }
-
-func authRouteGroup(s *gin.Engine, relativePath string) *gin.RouterGroup {
-	group := s.Group(relativePath)
-	// 中间件鉴权
-	group.Use(middleware.RequireAdmin(), middleware.CORS())
-	return group
-}

+ 2 - 1
http/route/route.go

@@ -6,8 +6,9 @@ import "github.com/gin-gonic/gin"
 func HTTPServerRoute(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 	routes := []func(s *gin.Engine){
 		Root(opts...),
-		AppAPI(opts...),
+		SystemAPI(opts...),
 		DebugAPI(opts...),
+		OpsAPI(opts...),
 	}
 
 	return func(s *gin.Engine) {

+ 63 - 0
http/route/system_api.go

@@ -0,0 +1,63 @@
+package route
+
+import (
+	"kpt-tmr-group/http/handler"
+	"kpt-tmr-group/http/handler/mobile"
+	"kpt-tmr-group/http/handler/system"
+	"kpt-tmr-group/http/middleware"
+
+	"github.com/gin-gonic/gin"
+)
+
+func SystemAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
+	return func(s *gin.Engine) {
+		for _, opt := range opts {
+			opt(s)
+		}
+		// Not Found
+		s.NoRoute(handler.Handle404)
+		// Health Check
+		s.GET("/check", handler.Health)
+
+		s.POST("/auth", system.Auth)
+		s.GET("/wx_applet/openid/:js_code", system.GetWxAppletOpenId)
+
+		// system API 组
+		// 系统用户
+		systemRoute := authRouteGroup(s, "/api/v1/system/")
+		systemRoute.POST("/user_info", system.GetUserInfo)
+		systemRoute.POST("/user/add", system.AddSystemUser)
+		systemRoute.GET("/user/details/:user_id", system.DetailsSystemUser)
+		systemRoute.POST("/user/list", system.SearchSystemUserList)
+		systemRoute.POST("/user/edit", system.EditSystemUser)
+		systemRoute.POST("/user/is_show", system.IsShowSystemUser)
+		systemRoute.DELETE("/user/:user_id", system.DeleteUser)
+		systemRoute.POST("/user/permissions", system.GetSystemUserPermissions)
+		systemRoute.POST("/user/rest_password/:user_id", system.ResetPasswordSystemUser)
+		systemRoute.POST("/user/logout", system.LogoutSystemUser)
+
+		// 系统角色
+		systemRoute.POST("/role/add", system.AddSystemRole)
+		systemRoute.GET("/role/permissions/:role_id", system.GetRolePermissions)
+		systemRoute.POST("/role/edit", system.EditSystemRole)
+		systemRoute.DELETE("/role/:role_id", system.DeleteSystemRole)
+		systemRoute.POST("/role/list", system.SearchSystemRoleList)
+
+		// 系统菜单权限
+		systemRoute.POST("/menu/add", system.AddSystemMenu)
+		systemRoute.POST("/menu/edit", system.EditSystemMenu)
+		systemRoute.POST("/menu/is_show", system.IsShowSystemMenu)
+		systemRoute.POST("/menu/list", system.SearchSystemMenuList)
+		systemRoute.DELETE("/menu/:menu_id", system.DeleteSystemMenu)
+
+		// 移动端
+		systemRoute.POST("/mobile/list", mobile.SearchMobileList)
+	}
+}
+
+func authRouteGroup(s *gin.Engine, relativePath string) *gin.RouterGroup {
+	group := s.Group(relativePath)
+	// 中间件鉴权
+	group.Use(middleware.RequireAdmin(), middleware.CORS())
+	return group
+}

+ 17 - 1
model/system_role.go

@@ -36,7 +36,7 @@ func NewSystemRole(req *operationPb.AddRoleRequest) *SystemRole {
 
 type SystemRoleSlice []*SystemRole
 
-func (s SystemRoleSlice) ToPB() []*operationPb.AddRoleRequest {
+func (s SystemRoleSlice) ToPB(groupPastureList map[int64][]*GroupPasture, systemMenuList map[int64][]*SystemMenu) []*operationPb.AddRoleRequest {
 	res := make([]*operationPb.AddRoleRequest, len(s))
 	for i, v := range s {
 		res[i] = &operationPb.AddRoleRequest{
@@ -48,6 +48,22 @@ func (s SystemRoleSlice) ToPB() []*operationPb.AddRoleRequest {
 			CreatedAt:       uint32(v.CreatedAt),
 			CreatedAtFormat: time.Unix(v.CreatedAt, 0).Format(LayoutTime),
 		}
+		groupPasture, ok := groupPastureList[v.Id]
+		if ok {
+			for _, g := range groupPasture {
+				res[i].PastureList = append(res[i].PastureList, g.Name)
+				res[i].PastureId = append(res[i].PastureId, uint32(g.Id))
+			}
+
+		}
+
+		systemMenu, ok := systemMenuList[v.Id]
+		if ok {
+			for _, m := range systemMenu {
+				res[i].MenuList = append(res[i].MenuList, m.Name)
+				res[i].MenuId = append(res[i].MenuId, uint32(m.Id))
+			}
+		}
 	}
 	return res
 }

+ 28 - 4
module/backend/system_service.go

@@ -423,7 +423,7 @@ func (s *StoreEntry) DeleteSystemRole(ctx context.Context, roleId int64) error {
 
 // SearchSystemRoleList 查询系统角色
 func (s *StoreEntry) SearchSystemRoleList(ctx context.Context, req *operationPb.SearchRoleRequest) (*operationPb.SearchRoleResponse, error) {
-	systemRole := make([]*model.SystemRole, 0)
+	systemRoleList := make([]*model.SystemRole, 0)
 	var count int64 = 0
 
 	pref := s.DB.Model(new(model.SystemRole)).Where("is_show = ?", operationPb.IsShow_OK)
@@ -431,11 +431,35 @@ func (s *StoreEntry) SearchSystemRoleList(ctx context.Context, req *operationPb.
 		pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
 	}
 
-	if err := pref.Order("id desc").Count(&count).Limit(int(req.Pagination.PageSize)).Offset(int(req.Pagination.PageOffset)).
-		Find(&systemRole).Debug().Error; err != nil {
+	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)
 	}
 
+	permissionsPastureMap := make(map[int64][]*model.GroupPasture, 0)
+	permissionsMenuMap := make(map[int64][]*model.SystemMenu, 0)
+	for _, role := range systemRoleList {
+		groupPastureList := make([]*model.GroupPasture, 0)
+		if err := s.DB.Table(new(model.SystemGroupPasturePermissions).TableName()).Select(fmt.Sprintf("%s.*", new(model.GroupPasture).TableName())).
+			Joins(fmt.Sprintf("left join %s on %s = %s and %s", new(model.GroupPasture).TableName(), fmt.Sprintf("%s.pasture_id", new(model.SystemGroupPasturePermissions).TableName()),
+				fmt.Sprintf("%s.id", new(model.GroupPasture).TableName()), fmt.Sprintf("%s.is_show = %d", new(model.SystemGroupPasturePermissions).TableName(), operationPb.IsShow_OK))).
+			Where(fmt.Sprintf("%s.role_id = ?", new(model.SystemGroupPasturePermissions).TableName()), role.Id).
+			Find(&groupPastureList).Error; err != nil {
+			continue
+		}
+		permissionsPastureMap[role.Id] = groupPastureList
+
+		systemMenuList := make([]*model.SystemMenu, 0)
+		if err := s.DB.Table(new(model.SystemMenuPermissions).TableName()).Select(fmt.Sprintf("%s.*", new(model.SystemMenu).TableName())).
+			Joins(fmt.Sprintf("left join %s on %s = %s and %s", new(model.SystemMenu).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 {
+			continue
+		}
+		permissionsMenuMap[role.Id] = systemMenuList
+	}
+
 	return &operationPb.SearchRoleResponse{
 		Code: http.StatusOK,
 		Msg:  "ok",
@@ -443,7 +467,7 @@ func (s *StoreEntry) SearchSystemRoleList(ctx context.Context, req *operationPb.
 			Page:     req.Pagination.Page,
 			Total:    int32(count),
 			PageSize: req.Pagination.PageSize,
-			List:     model.SystemRoleSlice(systemRole).ToPB(),
+			List:     model.SystemRoleSlice(systemRoleList).ToPB(permissionsPastureMap, permissionsMenuMap),
 		},
 	}, nil
 }

+ 22 - 2
proto/go/backend/operation/system.pb.go

@@ -193,6 +193,8 @@ type AddRoleRequest struct {
 	CreateUser      string      `protobuf:"bytes,8,opt,name=create_user,json=createUser,proto3" json:"create_user,omitempty"`                         // 创建用户
 	CreatedAt       uint32      `protobuf:"varint,9,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`                           // 创建时间
 	CreatedAtFormat string      `protobuf:"bytes,10,opt,name=created_at_format,json=createdAtFormat,proto3" json:"created_at_format,omitempty"`       // 创建时间格式化
+	PastureList     []string    `protobuf:"bytes,11,rep,name=pasture_list,json=pastureList,proto3" json:"pasture_list,omitempty"`                     // 负责的牧场
+	MenuList        []string    `protobuf:"bytes,12,rep,name=menu_list,json=menuList,proto3" json:"menu_list,omitempty"`                              // 权限列表
 }
 
 func (x *AddRoleRequest) Reset() {
@@ -297,6 +299,20 @@ func (x *AddRoleRequest) GetCreatedAtFormat() string {
 	return ""
 }
 
+func (x *AddRoleRequest) GetPastureList() []string {
+	if x != nil {
+		return x.PastureList
+	}
+	return nil
+}
+
+func (x *AddRoleRequest) GetMenuList() []string {
+	if x != nil {
+		return x.MenuList
+	}
+	return nil
+}
+
 type SearchRoleRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -2080,7 +2096,7 @@ var file_backend_operation_system_proto_rawDesc = []byte{
 	0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x22, 0x0a,
 	0x08, 0x57, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x65,
 	0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x70, 0x65, 0x6e, 0x69,
-	0x64, 0x22, 0xc8, 0x02, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71,
+	0x64, 0x22, 0x88, 0x03, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71,
 	0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d,
 	0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
 	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x61,
@@ -2100,7 +2116,11 @@ var file_backend_operation_system_proto_rawDesc = []byte{
 	0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74,
 	0x12, 0x2a, 0x0a, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x66,
 	0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x72, 0x65,
-	0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x6b, 0x0a, 0x11,
+	0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x21, 0x0a, 0x0c,
+	0x70, 0x61, 0x73, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x0b, 0x20, 0x03,
+	0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x73, 0x74, 0x75, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12,
+	0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6e, 0x75, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x0c, 0x20, 0x03,
+	0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x6e, 0x75, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x6b, 0x0a, 0x11,
 	0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
 	0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
 	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74,