diff --git a/internal/app/common/service/casbin.go b/internal/app/common/service/casbin.go index 8721419..ba7e691 100644 --- a/internal/app/common/service/casbin.go +++ b/internal/app/common/service/casbin.go @@ -118,6 +118,27 @@ func (a *adapterCasbin) RemovePolicy(sec string, ptype string, rule []string) er return err } +func (a *adapterCasbin) AddPolicies(sec string, ptype string, rules [][]string) error { + lines := make([]*entity.CasbinRule, len(rules)) + for k, rule := range rules { + lines[k] = savePolicyLine(ptype, rule) + } + _, err := dao.CasbinRule.Ctx(a.ctx).Data(lines).Insert() + return err +} + +// RemovePolicies removes policy rules from the storage. +// This is part of the Auto-Save feature. +func (a *adapterCasbin) RemovePolicies(sec string, ptype string, rules [][]string) error { + for _, rule := range rules { + err := a.RemovePolicy(sec, ptype, rule) + if err != nil { + return err + } + } + return nil +} + // RemoveFilteredPolicy removes policy rules that match the filter from the storage. func (a *adapterCasbin) RemoveFilteredPolicy(sec string, ptype string, fieldIndex int, fieldValues ...string) error { diff --git a/internal/app/system/logic/sysRole/sys_role.go b/internal/app/system/logic/sysRole/sys_role.go index 6354085..240d8f8 100644 --- a/internal/app/system/logic/sysRole/sys_role.go +++ b/internal/app/system/logic/sysRole/sys_role.go @@ -105,10 +105,12 @@ func (s *sSysRole) AddRoleRule(ctx context.Context, ruleIds []uint, roleId int64 enforcer, e := commonService.CasbinEnforcer(ctx) liberr.ErrIsNil(ctx, e) ruleIdsStr := gconv.Strings(ruleIds) - for _, v := range ruleIdsStr { - _, err = enforcer.AddPolicy(gconv.String(roleId), v, "All") - liberr.ErrIsNil(ctx, err) + rules := make([][]string, len(ruleIdsStr)) + for k, v := range ruleIdsStr { + rules[k] = []string{gconv.String(roleId), v, "All"} } + _, err = enforcer.AddPolicies(rules) + liberr.ErrIsNil(ctx, err) }) return }