yxh 4 жил өмнө
parent
commit
e56fabc675

+ 9 - 0
api/v1/system/sys_auth_rule.go

@@ -100,3 +100,12 @@ type RuleUpdateReq struct {
 
 
 type RuleUpdateRes struct {
 type RuleUpdateRes struct {
 }
 }
+
+type RuleDeleteReq struct {
+	g.Meta        `path:"/menu/delete" tags:"菜单管理" method:"delete" summary:"删除菜单"`
+	Authorization string `p:"Authorization" in:"header" dc:"Bearer {{token}}"`
+	Ids           []int  `p:"ids" v:"required#菜单id必须"`
+}
+
+type RuleDeleteRes struct {
+}

+ 6 - 0
internal/app/system/controller/sys_auth_rule.go

@@ -70,3 +70,9 @@ func (c *menuController) Update(ctx context.Context, req *system.RuleUpdateReq)
 	err = service.Rule().Update(ctx, req)
 	err = service.Rule().Update(ctx, req)
 	return
 	return
 }
 }
+
+// Delete 删除菜单
+func (c *menuController) Delete(ctx context.Context, req *system.RuleDeleteReq) (res *system.RuleDeleteRes, err error) {
+	err = service.Rule().DeleteMenuByIds(ctx, req.Ids)
+	return
+}

+ 46 - 0
internal/app/system/service/sys_auth_rule.go

@@ -35,6 +35,7 @@ type IRule interface {
 	Update(ctx context.Context, req *system.RuleUpdateReq) (err error)
 	Update(ctx context.Context, req *system.RuleUpdateReq) (err error)
 	GetMenuListSearch(ctx context.Context, req *system.RuleSearchReq) (res []*model.SysAuthRuleInfoRes, err error)
 	GetMenuListSearch(ctx context.Context, req *system.RuleSearchReq) (res []*model.SysAuthRuleInfoRes, err error)
 	GetMenuListTree(pid uint, list []*model.SysAuthRuleInfoRes) []*model.SysAuthRuleTreeRes
 	GetMenuListTree(pid uint, list []*model.SysAuthRuleInfoRes) []*model.SysAuthRuleTreeRes
+	DeleteMenuByIds(ctx context.Context, ids []int) (err error)
 }
 }
 
 
 type ruleImpl struct {
 type ruleImpl struct {
@@ -278,3 +279,48 @@ func (s *ruleImpl) GetMenuListTree(pid uint, list []*model.SysAuthRuleInfoRes) [
 	}
 	}
 	return tree
 	return tree
 }
 }
+
+// DeleteMenuByIds 删除菜单
+func (s *ruleImpl) DeleteMenuByIds(ctx context.Context, ids []int) (err error) {
+	var list []*model.SysAuthRuleInfoRes
+	list, err = s.GetMenuList(ctx)
+	if err != nil {
+		return
+	}
+	childrenIds := make([]int, 0, len(list))
+	for _, id := range ids {
+		rules := s.FindSonByParentId(list, gconv.Uint(id))
+		for _, child := range rules {
+			childrenIds = append(childrenIds, gconv.Int(child.Id))
+		}
+	}
+	ids = append(ids, childrenIds...)
+	err = g.DB().Transaction(ctx, func(ctx context.Context, tx *gdb.TX) error {
+		return g.Try(func() {
+			_, err = dao.SysAuthRule.Ctx(ctx).Where("id in (?)", ids).Delete()
+			liberr.ErrIsNil(ctx, err, "删除失败")
+			//删除权限
+			enforcer, err := commonService.CasbinEnforcer(ctx)
+			liberr.ErrIsNil(ctx, err)
+			for _, v := range ids {
+				_, err = enforcer.RemoveFilteredPolicy(1, gconv.String(v))
+				liberr.ErrIsNil(ctx, err)
+			}
+			// 删除相关缓存
+			commonService.Cache(ctx).RemoveByTag(ctx, consts.CacheSysAuthTag)
+		})
+	})
+	return
+}
+
+func (s *ruleImpl) FindSonByParentId(list []*model.SysAuthRuleInfoRes, pid uint) []*model.SysAuthRuleInfoRes {
+	children := make([]*model.SysAuthRuleInfoRes, 0, len(list))
+	for _, v := range list {
+		if v.Pid == pid {
+			children = append(children, v)
+			fChildren := s.FindSonByParentId(list, v.Id)
+			children = append(children, fChildren...)
+		}
+	}
+	return children
+}