后台权限组详情/授权菜单接口等等

This commit is contained in:
momo
2023-11-22 10:16:47 +08:00
parent ca1c10382a
commit 1a9d4eca2e
20 changed files with 195 additions and 265 deletions

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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)

View File

@@ -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)
// }

View File

@@ -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)

View File

@@ -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)
// }

View File

@@ -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)
// }

View File

@@ -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)
// }