From 1a9d4eca2e2d61b806c499fb8bb182ff26f2fefc Mon Sep 17 00:00:00 2001 From: momo <1012651275@qq.com> Date: Wed, 22 Nov 2023 10:16:47 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=BB=84=E8=AF=A6=E6=83=85/=E6=8E=88=E6=9D=83=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E6=8E=A5=E5=8F=A3=E7=AD=89=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/gmodel/ldap_casbin_rule_gen.go | 24 ------ model/gmodel/ldap_casbin_rule_logic.go | 2 - model/gmodel/ldap_group_gen.go | 17 ++-- model/gmodel/ldap_group_menus_gen.go | 19 ----- model/gmodel/ldap_group_menus_logic.go | 23 ------ model/gmodel/ldap_user_gen.go | 6 +- model/gmodel/var_gen.go | 4 - ...andler.go => getldapgroupdetailhandler.go} | 8 +- server/ldap-admin/internal/handler/routes.go | 14 ++-- ...ehandler.go => setldapgroupauthhandler.go} | 8 +- .../internal/logic/deleteapilogic.go | 4 - .../internal/logic/deleteldapgrouplogic.go | 8 -- .../internal/logic/deletemenulogic.go | 7 +- .../internal/logic/getldapgroupdetaillogic.go | 77 ++++++++++++++++++ .../internal/logic/getldapgroupslogic.go | 5 +- .../internal/logic/setldapcasbinrulelogic.go | 78 ------------------- .../internal/logic/setldapgroupauthlogic.go | 43 ++++++++++ .../internal/logic/setldapgroupmenuslogic.go | 66 ---------------- server/ldap-admin/internal/types/types.go | 16 ++++ server_api/ldap-admin.api | 31 ++++++-- 20 files changed, 195 insertions(+), 265 deletions(-) delete mode 100644 model/gmodel/ldap_casbin_rule_gen.go delete mode 100644 model/gmodel/ldap_casbin_rule_logic.go delete mode 100644 model/gmodel/ldap_group_menus_gen.go delete mode 100644 model/gmodel/ldap_group_menus_logic.go rename server/ldap-admin/internal/handler/{setldapgroupmenushandler.go => getldapgroupdetailhandler.go} (70%) rename server/ldap-admin/internal/handler/{setldapcasbinrulehandler.go => setldapgroupauthhandler.go} (71%) create mode 100644 server/ldap-admin/internal/logic/getldapgroupdetaillogic.go delete mode 100644 server/ldap-admin/internal/logic/setldapcasbinrulelogic.go create mode 100644 server/ldap-admin/internal/logic/setldapgroupauthlogic.go delete mode 100644 server/ldap-admin/internal/logic/setldapgroupmenuslogic.go diff --git a/model/gmodel/ldap_casbin_rule_gen.go b/model/gmodel/ldap_casbin_rule_gen.go deleted file mode 100644 index f34dc610..00000000 --- a/model/gmodel/ldap_casbin_rule_gen.go +++ /dev/null @@ -1,24 +0,0 @@ -package gmodel - -import ( - "gorm.io/gorm" -) - -// ldap_casbin_rule 权限表 -type LdapCasbinRule struct { - Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // - V0 *string `gorm:"default:'';" json:"v0"` // - V1 *string `gorm:"default:'';" json:"v1"` // - V2 *string `gorm:"default:'';" json:"v2"` // - V3 *string `gorm:"default:'';" json:"v3"` // - V4 *string `gorm:"default:'';" json:"v4"` // - V5 *string `gorm:"default:'';" json:"v5"` // -} -type LdapCasbinRuleModel struct { - db *gorm.DB - name string -} - -func NewLdapCasbinRuleModel(db *gorm.DB) *LdapCasbinRuleModel { - return &LdapCasbinRuleModel{db: db, name: "ldap_casbin_rule"} -} diff --git a/model/gmodel/ldap_casbin_rule_logic.go b/model/gmodel/ldap_casbin_rule_logic.go deleted file mode 100644 index e68225aa..00000000 --- a/model/gmodel/ldap_casbin_rule_logic.go +++ /dev/null @@ -1,2 +0,0 @@ -package gmodel -// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_group_gen.go b/model/gmodel/ldap_group_gen.go index 09cd4511..bacaf4a5 100644 --- a/model/gmodel/ldap_group_gen.go +++ b/model/gmodel/ldap_group_gen.go @@ -7,14 +7,15 @@ import ( // ldap_group 权限组表 type LdapGroup struct { - Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // - Name *string `gorm:"default:'';" json:"name"` // - Keyword *string `gorm:"default:'';" json:"keyword"` // - Remark *string `gorm:"default:'';" json:"remark"` // - Status *int64 `gorm:"default:1;" json:"status"` // 1正常, 2禁用 - Sort *int64 `gorm:"default:999;" json:"sort"` // 分组排序(排序越大权限越低, 不能查看比自己序号小的角色, 不能编辑同序号用户权限, 排序为1表示超级管理员) - Ctime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"ctime"` // - Utime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"utime"` // + Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // + Name *string `gorm:"default:'';" json:"name"` // + Keyword *string `gorm:"default:'';" json:"keyword"` // + Remark *string `gorm:"default:'';" json:"remark"` // + Status *int64 `gorm:"default:1;" json:"status"` // 1正常, 2禁用 + Sort *int64 `gorm:"default:999;" json:"sort"` // 分组排序(排序越大权限越低, 不能查看比自己序号小的角色, 不能编辑同序号用户权限, 排序为1表示超级管理员) + Metadata *[]byte `gorm:"default:'';" json:"metadata"` // + Ctime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"ctime"` // + Utime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"utime"` // } type LdapGroupModel struct { db *gorm.DB diff --git a/model/gmodel/ldap_group_menus_gen.go b/model/gmodel/ldap_group_menus_gen.go deleted file mode 100644 index fd3a4a1d..00000000 --- a/model/gmodel/ldap_group_menus_gen.go +++ /dev/null @@ -1,19 +0,0 @@ -package gmodel - -import ( - "gorm.io/gorm" -) - -// ldap_group_menus 权限分组菜单表 -type LdapGroupMenus struct { - MenuId *int64 `gorm:"default:0;" json:"menu_id"` // - GroupId *int64 `gorm:"default:0;" json:"group_id"` // -} -type LdapGroupMenusModel struct { - db *gorm.DB - name string -} - -func NewLdapGroupMenusModel(db *gorm.DB) *LdapGroupMenusModel { - return &LdapGroupMenusModel{db: db, name: "ldap_group_menus"} -} diff --git a/model/gmodel/ldap_group_menus_logic.go b/model/gmodel/ldap_group_menus_logic.go deleted file mode 100644 index cae06058..00000000 --- a/model/gmodel/ldap_group_menus_logic.go +++ /dev/null @@ -1,23 +0,0 @@ -package gmodel - -import "context" - -func (gm *LdapGroupMenusModel) FindOne(ctx context.Context, menuId, groupId int64) (resp *LdapGroupMenus, err error) { - err = gm.db.WithContext(ctx).Model(&LdapGroupMenus{}).Where("menu_id = ? and group_id = ?", menuId, groupId).Take(&resp).Error - return resp, err -} - -func (gm *LdapGroupMenusModel) Create(ctx context.Context, data *LdapGroupMenus) error { - return gm.db.WithContext(ctx).Model(&LdapGroupMenus{}).Create(&data).Error -} - -func (gm *LdapGroupMenusModel) Delete(ctx context.Context, menuId, groupId int64) error { - return gm.db.WithContext(ctx).Model(&LdapGroupMenus{}).Where("menu_id = ? and group_id", menuId, groupId).Delete(&LdapGroupMenus{}).Error -} - -func (gm *LdapGroupMenusModel) DeleteByMenuId(ctx context.Context, menuId int64) error { - return gm.db.WithContext(ctx).Model(&LdapGroupMenus{}).Where("menu_id = ?", menuId).Delete(&LdapGroupMenus{}).Error -} -func (gm *LdapGroupMenusModel) DeleteByGroupId(ctx context.Context, groupId int64) error { - return gm.db.WithContext(ctx).Model(&LdapGroupMenus{}).Where("group_id = ?", groupId).Delete(&LdapGroupMenus{}).Error -} diff --git a/model/gmodel/ldap_user_gen.go b/model/gmodel/ldap_user_gen.go index d534adf5..016fe8d1 100644 --- a/model/gmodel/ldap_user_gen.go +++ b/model/gmodel/ldap_user_gen.go @@ -2,11 +2,15 @@ package gmodel import ( "gorm.io/gorm" + "time" ) // ldap_user ldap_用户id递增表 type LdapUser struct { - Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // + Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // + UserDn *string `gorm:"index;default:'';" json:"user_dn"` // + Ctime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"ctime"` // + Utime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"utime"` // } type LdapUserModel struct { db *gorm.DB diff --git a/model/gmodel/var_gen.go b/model/gmodel/var_gen.go index d0fd481e..9b08274a 100644 --- a/model/gmodel/var_gen.go +++ b/model/gmodel/var_gen.go @@ -110,9 +110,7 @@ type AllModelsGen struct { FsWebSet *FsWebSetModel // fs_web_set 网站配置表 FsZipCode *FsZipCodeModel // fs_zip_code 邮编表 LdapApis *LdapApisModel // ldap_apis api表 - LdapCasbinRule *LdapCasbinRuleModel // ldap_casbin_rule 权限表 LdapGroup *LdapGroupModel // ldap_group 权限组表 - LdapGroupMenus *LdapGroupMenusModel // ldap_group_menus 权限分组菜单表 LdapMenus *LdapMenusModel // ldap_menus 菜单表 LdapUser *LdapUserModel // ldap_user ldap_用户id递增表 LdapUserGroup *LdapUserGroupModel // ldap_user_group 用户权限分组表 @@ -227,9 +225,7 @@ func NewAllModels(gdb *gorm.DB) *AllModelsGen { FsWebSet: NewFsWebSetModel(gdb), FsZipCode: NewFsZipCodeModel(gdb), LdapApis: NewLdapApisModel(gdb), - LdapCasbinRule: NewLdapCasbinRuleModel(gdb), LdapGroup: NewLdapGroupModel(gdb), - LdapGroupMenus: NewLdapGroupMenusModel(gdb), LdapMenus: NewLdapMenusModel(gdb), LdapUser: NewLdapUserModel(gdb), LdapUserGroup: NewLdapUserGroupModel(gdb), diff --git a/server/ldap-admin/internal/handler/setldapgroupmenushandler.go b/server/ldap-admin/internal/handler/getldapgroupdetailhandler.go similarity index 70% rename from server/ldap-admin/internal/handler/setldapgroupmenushandler.go rename to server/ldap-admin/internal/handler/getldapgroupdetailhandler.go index b8272ccd..7f765655 100644 --- a/server/ldap-admin/internal/handler/setldapgroupmenushandler.go +++ b/server/ldap-admin/internal/handler/getldapgroupdetailhandler.go @@ -11,22 +11,22 @@ import ( "fusenapi/server/ldap-admin/internal/types" ) -func SetLdapGroupMenusHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { +func GetLdapGroupDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - var req types.SetLdapGroupMenusReq + var req types.GetLdapGroupDetailReq userinfo, err := basic.RequestParse(w, r, svcCtx, &req) if err != nil { return } // 创建一个业务逻辑层实例 - l := logic.NewSetLdapGroupMenusLogic(r.Context(), svcCtx) + l := logic.NewGetLdapGroupDetailLogic(r.Context(), svcCtx) rl := reflect.ValueOf(l) basic.BeforeLogic(w, r, rl) - resp := l.SetLdapGroupMenus(&req, userinfo) + resp := l.GetLdapGroupDetail(&req, userinfo) if !basic.AfterLogic(w, r, rl, resp) { basic.NormalAfterLogic(w, r, resp) diff --git a/server/ldap-admin/internal/handler/routes.go b/server/ldap-admin/internal/handler/routes.go index 3cd84f8e..c6e92528 100644 --- a/server/ldap-admin/internal/handler/routes.go +++ b/server/ldap-admin/internal/handler/routes.go @@ -17,6 +17,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/api/ldap-admin/get_ldap_group", Handler: GetLdapGroupsHandler(serverCtx), }, + { + Method: http.MethodGet, + Path: "/api/ldap-admin/get_ldap_group_detail", + Handler: GetLdapGroupDetailHandler(serverCtx), + }, { Method: http.MethodPost, Path: "/api/ldap-admin/save_ldap_group", @@ -29,13 +34,8 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { }, { Method: http.MethodPost, - Path: "/api/ldap-admin/set_ldap_group_menus", - Handler: SetLdapGroupMenusHandler(serverCtx), - }, - { - Method: http.MethodPost, - Path: "/api/ldap-admin/set_ldap_casbin_rule", - Handler: SetLdapCasbinRuleHandler(serverCtx), + Path: "/api/ldap-admin/set_ldap_group_auth", + Handler: SetLdapGroupAuthHandler(serverCtx), }, { Method: http.MethodPost, diff --git a/server/ldap-admin/internal/handler/setldapcasbinrulehandler.go b/server/ldap-admin/internal/handler/setldapgroupauthhandler.go similarity index 71% rename from server/ldap-admin/internal/handler/setldapcasbinrulehandler.go rename to server/ldap-admin/internal/handler/setldapgroupauthhandler.go index 2c6b0d5e..fe4f0be6 100644 --- a/server/ldap-admin/internal/handler/setldapcasbinrulehandler.go +++ b/server/ldap-admin/internal/handler/setldapgroupauthhandler.go @@ -11,22 +11,22 @@ import ( "fusenapi/server/ldap-admin/internal/types" ) -func SetLdapCasbinRuleHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { +func SetLdapGroupAuthHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - var req types.SetLdapCasbinRuleReq + var req types.SetLdapGroupAuthReq userinfo, err := basic.RequestParse(w, r, svcCtx, &req) if err != nil { return } // 创建一个业务逻辑层实例 - l := logic.NewSetLdapCasbinRuleLogic(r.Context(), svcCtx) + l := logic.NewSetLdapGroupAuthLogic(r.Context(), svcCtx) rl := reflect.ValueOf(l) basic.BeforeLogic(w, r, rl) - resp := l.SetLdapCasbinRule(&req, userinfo) + resp := l.SetLdapGroupAuth(&req, userinfo) if !basic.AfterLogic(w, r, rl, resp) { basic.NormalAfterLogic(w, r, resp) diff --git a/server/ldap-admin/internal/logic/deleteapilogic.go b/server/ldap-admin/internal/logic/deleteapilogic.go index da55a0c3..2936350a 100644 --- a/server/ldap-admin/internal/logic/deleteapilogic.go +++ b/server/ldap-admin/internal/logic/deleteapilogic.go @@ -50,10 +50,6 @@ func (l *DeleteApiLogic) DeleteApi(req *types.DeleteApiReq, userinfo *auth.UserI if resLdapApiDel.Error != nil { return resLdapApiDel.Error } - resLdapCasbinRulesDel := tx.Where("v3 IN ?", req.Ids).Delete(&gmodel.LdapCasbinRule{}) - if resLdapCasbinRulesDel.Error != nil { - return resLdapCasbinRulesDel.Error - } return nil }) if txErr != nil { diff --git a/server/ldap-admin/internal/logic/deleteldapgrouplogic.go b/server/ldap-admin/internal/logic/deleteldapgrouplogic.go index d50857fc..71ac32a7 100644 --- a/server/ldap-admin/internal/logic/deleteldapgrouplogic.go +++ b/server/ldap-admin/internal/logic/deleteldapgrouplogic.go @@ -55,14 +55,6 @@ func (l *DeleteLdapGroupLogic) DeleteLdapGroup(req *types.DeleteLdapGroupReq, us if resLdapUserGroupDel.Error != nil { return resLdapUserGroupDel.Error } - resLdapGroupMenusDel := tx.Where("group_id IN ?", req.Ids).Delete(&gmodel.LdapGroupMenus{}) - if resLdapGroupMenusDel.Error != nil { - return resLdapGroupMenusDel.Error - } - resLdapCasbinRulesDel := tx.Where("v0 IN ?", req.Ids).Delete(&gmodel.LdapCasbinRule{}) - if resLdapCasbinRulesDel.Error != nil { - return resLdapCasbinRulesDel.Error - } return nil }) if txErr != nil { diff --git a/server/ldap-admin/internal/logic/deletemenulogic.go b/server/ldap-admin/internal/logic/deletemenulogic.go index 695252bd..a9d99b6b 100644 --- a/server/ldap-admin/internal/logic/deletemenulogic.go +++ b/server/ldap-admin/internal/logic/deletemenulogic.go @@ -4,9 +4,10 @@ import ( "fusenapi/model/gmodel" "fusenapi/utils/auth" "fusenapi/utils/basic" - "gorm.io/gorm" "time" + "gorm.io/gorm" + "context" "fusenapi/server/ldap-admin/internal/svc" @@ -48,9 +49,7 @@ func (l *DeleteMenuLogic) DeleteMenu(req *types.DeleteMenuReq, userinfo *auth.Us if err != nil { return err } - //删除分组绑定的菜单 - groupMenusModel := gmodel.NewLdapGroupMenusModel(tx) - return groupMenusModel.DeleteByMenuId(l.ctx, req.Id) + return nil }) if err != nil { logx.Error(err) diff --git a/server/ldap-admin/internal/logic/getldapgroupdetaillogic.go b/server/ldap-admin/internal/logic/getldapgroupdetaillogic.go new file mode 100644 index 00000000..9f46a424 --- /dev/null +++ b/server/ldap-admin/internal/logic/getldapgroupdetaillogic.go @@ -0,0 +1,77 @@ +package logic + +import ( + "encoding/json" + "errors" + "fusenapi/utils/auth" + "fusenapi/utils/basic" + + "context" + + "fusenapi/server/ldap-admin/internal/svc" + "fusenapi/server/ldap-admin/internal/types" + + "github.com/zeromicro/go-zero/core/logx" + "gorm.io/gorm" +) + +type GetLdapGroupDetailLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewGetLdapGroupDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetLdapGroupDetailLogic { + return &GetLdapGroupDetailLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +// 处理进入前逻辑w,r +// func (l *GetLdapGroupDetailLogic) BeforeLogic(w http.ResponseWriter, r *http.Request) { +// } + +func (l *GetLdapGroupDetailLogic) GetLdapGroupDetail(req *types.GetLdapGroupDetailReq, userinfo *auth.UserInfo) (resp *basic.Response) { + // 返回值必须调用Set重新返回, resp可以空指针调用 resp.SetStatus(basic.CodeOK, data) + // userinfo 传入值时, 一定不为null + resOne, err := l.svcCtx.AllModels.LdapGroup.FindOneById(l.ctx, req.Id) + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + basic.CodeServiceErr.Message = "记录不存在" + } else { + basic.CodeServiceErr.Message = "系统出错" + } + return resp.SetStatus(basic.CodeServiceErr) + } + var metadata []GroupAuth + if resOne.Metadata != nil { + err := json.Unmarshal(*resOne.Metadata, &metadata) + if err != nil { + basic.CodeServiceErr.Message = "系统出错" + return resp.SetStatus(basic.CodeServiceErr) + } + } + return resp.SetStatus(basic.CodeOK, map[string]interface{}{ + "id": resOne.Id, + "name": resOne.Name, + "keyword": resOne.Keyword, + "remark": resOne.Remark, + "status": resOne.Status, + "sort": resOne.Sort, + "metadata": metadata, + }) +} + +type GroupAuth struct { + Id int64 `json:"id"` + Name string `json:"name"` + Type string `json:"type"` + Metadata *GroupAuth `json:"metadata"` +} + +// 处理逻辑后 w,r 如:重定向, resp 必须重新处理 +// func (l *GetLdapGroupDetailLogic) AfterLogic(w http.ResponseWriter, r *http.Request, resp *basic.Response) { +// // httpx.OkJsonCtx(r.Context(), w, resp) +// } diff --git a/server/ldap-admin/internal/logic/getldapgroupslogic.go b/server/ldap-admin/internal/logic/getldapgroupslogic.go index 57de24d0..bf62e6dd 100644 --- a/server/ldap-admin/internal/logic/getldapgroupslogic.go +++ b/server/ldap-admin/internal/logic/getldapgroupslogic.go @@ -37,8 +37,9 @@ func (l *GetLdapGroupsLogic) GetLdapGroups(req *types.GetLdapGroupsReq, userinfo // userinfo 传入值时, 一定不为null resList, resCount, err := l.svcCtx.AllModels.LdapGroup.FindPage(l.ctx, gmodel.FindPageReq{ - Page: req.CurrentPage, - Limit: req.PerPage, + Page: req.CurrentPage, + Limit: req.PerPage, + Fields: "id,name,keyword,remark,status,sort", }) if err != nil { return resp.SetStatus(basic.CodeServiceErr) diff --git a/server/ldap-admin/internal/logic/setldapcasbinrulelogic.go b/server/ldap-admin/internal/logic/setldapcasbinrulelogic.go deleted file mode 100644 index 47f74d49..00000000 --- a/server/ldap-admin/internal/logic/setldapcasbinrulelogic.go +++ /dev/null @@ -1,78 +0,0 @@ -package logic - -import ( - "errors" - "fusenapi/model/gmodel" - "fusenapi/utils/auth" - "fusenapi/utils/basic" - "strconv" - - "context" - - "fusenapi/server/ldap-admin/internal/svc" - "fusenapi/server/ldap-admin/internal/types" - - "github.com/zeromicro/go-zero/core/logx" - "gorm.io/gorm" -) - -type SetLdapCasbinRuleLogic struct { - logx.Logger - ctx context.Context - svcCtx *svc.ServiceContext -} - -func NewSetLdapCasbinRuleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SetLdapCasbinRuleLogic { - return &SetLdapCasbinRuleLogic{ - Logger: logx.WithContext(ctx), - ctx: ctx, - svcCtx: svcCtx, - } -} - -// 处理进入前逻辑w,r -// func (l *SetLdapCasbinRuleLogic) BeforeLogic(w http.ResponseWriter, r *http.Request) { -// } - -func (l *SetLdapCasbinRuleLogic) SetLdapCasbinRule(req *types.SetLdapCasbinRuleReq, userinfo *auth.UserInfo) (resp *basic.Response) { - // 返回值必须调用Set重新返回, resp可以空指针调用 resp.SetStatus(basic.CodeOK, data) - // userinfo 传入值时, 一定不为null - resLdapGroupInfo, err := l.svcCtx.AllModels.LdapGroup.FindOneById(l.ctx, req.GroupId) - if err != nil { - if errors.Is(err, gorm.ErrRecordNotFound) { - basic.CodeServiceErr.Message = "权限组记录不存在" - } else { - basic.CodeServiceErr.Message = "系统出错" - } - return resp.SetStatus(basic.CodeServiceErr) - } - resLdapApiList, err := l.svcCtx.AllModels.LdapApis.FindAll(l.ctx, l.svcCtx.MysqlConn.Where("id IN ?", req.ApIds)) - if err != nil { - return resp.SetStatus(basic.CodeServiceErr) - } - if len(resLdapApiList) > 0 { - var groupIdStr = strconv.Itoa(int(resLdapGroupInfo.Id)) - var ldapCasbinRules []gmodel.LdapCasbinRule - for _, ldapApi := range resLdapApiList { - var apiIdStr = strconv.Itoa(int(ldapApi.Id)) - ldapCasbinRules = append(ldapCasbinRules, gmodel.LdapCasbinRule{ - V0: &groupIdStr, - V1: ldapApi.Path, - V2: ldapApi.Method, - V3: &apiIdStr, - }) - } - resCreateInBatches := l.svcCtx.MysqlConn.WithContext(l.ctx).CreateInBatches(ldapCasbinRules, 100) - if resCreateInBatches.Error != nil { - basic.CodeServiceErr.Message = "系统出错" - return resp.SetStatus(basic.CodeServiceErr) - } - } - - return resp.SetStatus(basic.CodeOK) -} - -// 处理逻辑后 w,r 如:重定向, resp 必须重新处理 -// func (l *SetLdapCasbinRuleLogic) AfterLogic(w http.ResponseWriter, r *http.Request, resp *basic.Response) { -// // httpx.OkJsonCtx(r.Context(), w, resp) -// } diff --git a/server/ldap-admin/internal/logic/setldapgroupauthlogic.go b/server/ldap-admin/internal/logic/setldapgroupauthlogic.go new file mode 100644 index 00000000..2461b558 --- /dev/null +++ b/server/ldap-admin/internal/logic/setldapgroupauthlogic.go @@ -0,0 +1,43 @@ +package logic + +import ( + "fusenapi/utils/auth" + "fusenapi/utils/basic" + + "context" + + "fusenapi/server/ldap-admin/internal/svc" + "fusenapi/server/ldap-admin/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type SetLdapGroupAuthLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewSetLdapGroupAuthLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SetLdapGroupAuthLogic { + return &SetLdapGroupAuthLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +// 处理进入前逻辑w,r +// func (l *SetLdapGroupAuthLogic) BeforeLogic(w http.ResponseWriter, r *http.Request) { +// } + +func (l *SetLdapGroupAuthLogic) SetLdapGroupAuth(req *types.SetLdapGroupAuthReq, userinfo *auth.UserInfo) (resp *basic.Response) { + // 返回值必须调用Set重新返回, resp可以空指针调用 resp.SetStatus(basic.CodeOK, data) + // userinfo 传入值时, 一定不为null + + return resp.SetStatus(basic.CodeOK) +} + +// 处理逻辑后 w,r 如:重定向, resp 必须重新处理 +// func (l *SetLdapGroupAuthLogic) AfterLogic(w http.ResponseWriter, r *http.Request, resp *basic.Response) { +// // httpx.OkJsonCtx(r.Context(), w, resp) +// } diff --git a/server/ldap-admin/internal/logic/setldapgroupmenuslogic.go b/server/ldap-admin/internal/logic/setldapgroupmenuslogic.go deleted file mode 100644 index dc26f316..00000000 --- a/server/ldap-admin/internal/logic/setldapgroupmenuslogic.go +++ /dev/null @@ -1,66 +0,0 @@ -package logic - -import ( - "errors" - "fusenapi/model/gmodel" - "fusenapi/utils/auth" - "fusenapi/utils/basic" - - "context" - - "fusenapi/server/ldap-admin/internal/svc" - "fusenapi/server/ldap-admin/internal/types" - - "github.com/zeromicro/go-zero/core/logx" - "gorm.io/gorm" -) - -type SetLdapGroupMenusLogic struct { - logx.Logger - ctx context.Context - svcCtx *svc.ServiceContext -} - -func NewSetLdapGroupMenusLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SetLdapGroupMenusLogic { - return &SetLdapGroupMenusLogic{ - Logger: logx.WithContext(ctx), - ctx: ctx, - svcCtx: svcCtx, - } -} - -// 处理进入前逻辑w,r -// func (l *SetLdapGroupMenusLogic) BeforeLogic(w http.ResponseWriter, r *http.Request) { -// } - -func (l *SetLdapGroupMenusLogic) SetLdapGroupMenus(req *types.SetLdapGroupMenusReq, userinfo *auth.UserInfo) (resp *basic.Response) { - // 返回值必须调用Set重新返回, resp可以空指针调用 resp.SetStatus(basic.CodeOK, data) - // userinfo 传入值时, 一定不为null - resLdapGroupInfo, err := l.svcCtx.AllModels.LdapGroup.FindOneById(l.ctx, req.GroupId) - if err != nil { - if errors.Is(err, gorm.ErrRecordNotFound) { - basic.CodeServiceErr.Message = "权限组记录不存在" - } else { - basic.CodeServiceErr.Message = "系统出错" - } - return resp.SetStatus(basic.CodeServiceErr) - } - var groupMenus []gmodel.LdapGroupMenus - for _, menuId := range req.MenuIds { - groupMenus = append(groupMenus, gmodel.LdapGroupMenus{ - GroupId: &resLdapGroupInfo.Id, - MenuId: &menuId, - }) - } - resCreateInBatches := l.svcCtx.MysqlConn.WithContext(l.ctx).CreateInBatches(groupMenus, 100) - if resCreateInBatches.Error != nil { - basic.CodeServiceErr.Message = "系统出错" - return resp.SetStatus(basic.CodeServiceErr) - } - return resp.SetStatus(basic.CodeOK) -} - -// 处理逻辑后 w,r 如:重定向, resp 必须重新处理 -// func (l *SetLdapGroupMenusLogic) AfterLogic(w http.ResponseWriter, r *http.Request, resp *basic.Response) { -// // httpx.OkJsonCtx(r.Context(), w, resp) -// } diff --git a/server/ldap-admin/internal/types/types.go b/server/ldap-admin/internal/types/types.go index b73230c9..5656ad18 100644 --- a/server/ldap-admin/internal/types/types.go +++ b/server/ldap-admin/internal/types/types.go @@ -5,6 +5,22 @@ import ( "fusenapi/utils/basic" ) +type GetLdapGroupDetailReq struct { + Id int64 `json:"id"` +} + +type SetLdapGroupAuthReq struct { + GroupId int64 `json:"group_id"` + GroupAuth GroupAuth `json:"group_auth"` +} + +type GroupAuth struct { + Id int64 `json:"id"` + Name string `json:"name"` + Type string `json:"type"` + Metadata string `json:"metadata,optional"` +} + type GetLdapGroupsReq struct { Id int64 `form:"id,optional"` //id Name string `form:"name,optional"` //名称 diff --git a/server_api/ldap-admin.api b/server_api/ldap-admin.api index f5e974e7..bb7e7be3 100644 --- a/server_api/ldap-admin.api +++ b/server_api/ldap-admin.api @@ -13,18 +13,20 @@ service ldap-admin { //获取权限组列表 @handler GetLdapGroupsHandler get /api/ldap-admin/get_ldap_group(GetLdapGroupsReq) returns (response); + //获取权限组详情 + @handler GetLdapGroupDetailHandler + get /api/ldap-admin/get_ldap_group_detail(GetLdapGroupDetailReq) returns (response); //保存权限组 @handler SaveLdapGroupHandler post /api/ldap-admin/save_ldap_group(SaveLdapGroupReq) returns (response); //删除权限组 @handler DeleteLdapGroupHandler post /api/ldap-admin/delete_ldap_group(DeleteLdapGroupReq) returns (response); - //权限组授权菜单 - @handler SetLdapGroupMenusHandler - post /api/ldap-admin/set_ldap_group_menus(SetLdapGroupMenusReq) returns (response); - //权限组授权接口 - @handler SetLdapCasbinRuleHandler - post /api/ldap-admin/set_ldap_casbin_rule(SetLdapCasbinRuleReq) returns (response); + + //权限组授权 + @handler SetLdapGroupAuthHandler + post /api/ldap-admin/set_ldap_group_auth(SetLdapGroupAuthReq) returns (response); + //权限组授权用户 @handler SetLdapGroupUserHandler post /api/ldap-admin/set_ldap_group_user(SetLdapGroupUserReq) returns (response); @@ -37,7 +39,7 @@ service ldap-admin { //删除API @handler DeleteApiHandler post /api/ldap-admin/delete_api(DeleteApiReq) returns (response); - + //保存菜单 @handler SaveMenuHandler post /api/ldap-admin/save_menu(SaveMenuReq) returns (response); @@ -95,6 +97,21 @@ service ldap-admin { } type ( + GetLdapGroupDetailReq { + Id int64 `json:"id"` + } + + SetLdapGroupAuthReq { + GroupId int64 `json:"group_id"` + GroupAuth GroupAuth `json:"group_auth"` + } + GroupAuth { + Id int64 `json:"id"` + Name string `json:"name"` + Type string `json:"type"` + Metadata string `json:"metadata,optional"` + } + GetLdapGroupsReq { Id int64 `form:"id,optional"` //id Name string `form:"name,optional"` //名称 From 6ed88bb607211fd2f4d0b679de214c0495d06093 Mon Sep 17 00:00:00 2001 From: momo <1012651275@qq.com> Date: Wed, 22 Nov 2023 10:56:25 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=BB=84=E8=AF=A6=E6=83=85/=E6=8E=88=E6=9D=83=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E6=8E=A5=E5=8F=A3=E7=AD=89=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../internal/logic/getldapgroupdetaillogic.go | 9 +--- .../internal/logic/savemenulogic.go | 3 +- .../internal/logic/setldapgroupauthlogic.go | 47 +++++++++++++++++++ server/ldap-admin/internal/types/types.go | 10 ++-- server_api/ldap-admin.api | 10 ++-- 5 files changed, 60 insertions(+), 19 deletions(-) diff --git a/server/ldap-admin/internal/logic/getldapgroupdetaillogic.go b/server/ldap-admin/internal/logic/getldapgroupdetaillogic.go index 9f46a424..8d174c65 100644 --- a/server/ldap-admin/internal/logic/getldapgroupdetaillogic.go +++ b/server/ldap-admin/internal/logic/getldapgroupdetaillogic.go @@ -45,7 +45,7 @@ func (l *GetLdapGroupDetailLogic) GetLdapGroupDetail(req *types.GetLdapGroupDeta } return resp.SetStatus(basic.CodeServiceErr) } - var metadata []GroupAuth + var metadata []types.GroupAuth if resOne.Metadata != nil { err := json.Unmarshal(*resOne.Metadata, &metadata) if err != nil { @@ -64,13 +64,6 @@ func (l *GetLdapGroupDetailLogic) GetLdapGroupDetail(req *types.GetLdapGroupDeta }) } -type GroupAuth struct { - Id int64 `json:"id"` - Name string `json:"name"` - Type string `json:"type"` - Metadata *GroupAuth `json:"metadata"` -} - // 处理逻辑后 w,r 如:重定向, resp 必须重新处理 // func (l *GetLdapGroupDetailLogic) AfterLogic(w http.ResponseWriter, r *http.Request, resp *basic.Response) { // // httpx.OkJsonCtx(r.Context(), w, resp) diff --git a/server/ldap-admin/internal/logic/savemenulogic.go b/server/ldap-admin/internal/logic/savemenulogic.go index 37362eea..802c97ef 100644 --- a/server/ldap-admin/internal/logic/savemenulogic.go +++ b/server/ldap-admin/internal/logic/savemenulogic.go @@ -5,10 +5,11 @@ import ( "fusenapi/model/gmodel" "fusenapi/utils/auth" "fusenapi/utils/basic" - "gorm.io/gorm" "strings" "time" + "gorm.io/gorm" + "context" "fusenapi/server/ldap-admin/internal/svc" diff --git a/server/ldap-admin/internal/logic/setldapgroupauthlogic.go b/server/ldap-admin/internal/logic/setldapgroupauthlogic.go index 2461b558..63092955 100644 --- a/server/ldap-admin/internal/logic/setldapgroupauthlogic.go +++ b/server/ldap-admin/internal/logic/setldapgroupauthlogic.go @@ -1,6 +1,8 @@ package logic import ( + "encoding/json" + "errors" "fusenapi/utils/auth" "fusenapi/utils/basic" @@ -10,6 +12,7 @@ import ( "fusenapi/server/ldap-admin/internal/types" "github.com/zeromicro/go-zero/core/logx" + "gorm.io/gorm" ) type SetLdapGroupAuthLogic struct { @@ -33,7 +36,51 @@ func NewSetLdapGroupAuthLogic(ctx context.Context, svcCtx *svc.ServiceContext) * func (l *SetLdapGroupAuthLogic) SetLdapGroupAuth(req *types.SetLdapGroupAuthReq, userinfo *auth.UserInfo) (resp *basic.Response) { // 返回值必须调用Set重新返回, resp可以空指针调用 resp.SetStatus(basic.CodeOK, data) // userinfo 传入值时, 一定不为null + resOne, err := l.svcCtx.AllModels.LdapGroup.FindOneById(l.ctx, req.GroupId) + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + basic.CodeServiceErr.Message = "记录不存在" + } else { + basic.CodeServiceErr.Message = "系统出错" + } + return resp.SetStatus(basic.CodeServiceErr) + } + var metadata []types.GroupAuth + if resOne.Metadata != nil { + err := json.Unmarshal(*resOne.Metadata, &metadata) + if err != nil { + basic.CodeServiceErr.Message = "系统出错" + return resp.SetStatus(basic.CodeServiceErr) + } + } + var groupAuth = types.GroupAuth{ + Id: req.GroupAuth.Id, + Type: req.GroupAuth.Type, + Name: req.GroupAuth.Name, + Metadata: req.GroupAuth.Metadata, + } + var status = 0 + if len(metadata) > 0 { + for k, v := range metadata { + if v.Type == groupAuth.Type && v.Id == groupAuth.Id { + status = 1 + metadata[k] = groupAuth + } + } + } + if status == 0 { + metadata = append(metadata, groupAuth) + } + // 更新metadata + metadataByte, _ := json.Marshal(metadata) + err = l.svcCtx.AllModels.LdapGroup.UpdateOne(l.ctx, resOne, map[string]interface{}{ + "metadata": string(metadataByte), + }) + if err != nil { + basic.CodeServiceErr.Message = "系统出错" + return resp.SetStatus(basic.CodeServiceErr) + } return resp.SetStatus(basic.CodeOK) } diff --git a/server/ldap-admin/internal/types/types.go b/server/ldap-admin/internal/types/types.go index 88304cd6..067ebf37 100644 --- a/server/ldap-admin/internal/types/types.go +++ b/server/ldap-admin/internal/types/types.go @@ -6,7 +6,7 @@ import ( ) type GetLdapGroupDetailReq struct { - Id int64 `json:"id"` + Id int64 `form:"id"` } type SetLdapGroupAuthReq struct { @@ -15,10 +15,10 @@ type SetLdapGroupAuthReq struct { } type GroupAuth struct { - Id int64 `json:"id"` - Name string `json:"name"` - Type string `json:"type"` - Metadata string `json:"metadata,optional"` + Id int64 `json:"id"` + Name string `json:"name"` + Type string `json:"type"` + Metadata []*GroupAuth `json:"metadata,optional"` } type GetLdapGroupsReq struct { diff --git a/server_api/ldap-admin.api b/server_api/ldap-admin.api index bf26d760..9961e3c2 100644 --- a/server_api/ldap-admin.api +++ b/server_api/ldap-admin.api @@ -101,7 +101,7 @@ service ldap-admin { type ( GetLdapGroupDetailReq { - Id int64 `json:"id"` + Id int64 `form:"id"` } SetLdapGroupAuthReq { @@ -109,10 +109,10 @@ type ( GroupAuth GroupAuth `json:"group_auth"` } GroupAuth { - Id int64 `json:"id"` - Name string `json:"name"` - Type string `json:"type"` - Metadata string `json:"metadata,optional"` + Id int64 `json:"id"` + Name string `json:"name"` + Type string `json:"type"` + Metadata []*GroupAuth `json:"metadata,optional"` } GetLdapGroupsReq {