diff --git a/app/admin/apis/sys_role.go b/app/admin/apis/sys_role.go index 507132e9..1a1e75b0 100644 --- a/app/admin/apis/sys_role.go +++ b/app/admin/apis/sys_role.go @@ -2,10 +2,11 @@ package apis import ( "fmt" + "net/http" + "github.com/gin-gonic/gin/binding" "github.com/go-admin-team/go-admin-core/sdk" "go-admin/app/admin/models" - "net/http" "github.com/gin-gonic/gin" "github.com/go-admin-team/go-admin-core/sdk/api" @@ -14,7 +15,6 @@ import ( "go-admin/app/admin/service" "go-admin/app/admin/service/dto" - "go-admin/common/global" ) type SysRole struct { @@ -128,11 +128,7 @@ func (e SysRole) Insert(c *gin.Context) { e.Error(500, err, "创建失败,"+err.Error()) return } - _, err = global.LoadPolicy(c) - if err != nil { - e.Error(500, err, "") - return - } + e.OK(req.GetId(), "创建成功") } @@ -168,11 +164,7 @@ func (e SysRole) Update(c *gin.Context) { e.Logger.Error(err) return } - _, err = global.LoadPolicy(c) - if err != nil { - e.Error(500, err, "") - return - } + e.OK(req.GetId(), "更新成功") } @@ -198,17 +190,14 @@ func (e SysRole) Delete(c *gin.Context) { return } - err = s.Remove(&req) + cb := sdk.Runtime.GetCasbinKey(c.Request.Host) + err = s.Remove(&req, cb) if err != nil { e.Logger.Error(err) e.Error(500, err, "") return } - _, err = global.LoadPolicy(c) - if err != nil { - e.Error(500, err, fmt.Sprintf("删除角色 %v 失败,失败信息 %s", req.GetId(), err.Error())) - return - } + e.OK(req.GetId(), fmt.Sprintf("删除角色角色 %v 状态成功!", req.GetId())) } diff --git a/app/admin/service/sys_role.go b/app/admin/service/sys_role.go index 6c514045..b87d20b9 100644 --- a/app/admin/service/sys_role.go +++ b/app/admin/service/sys_role.go @@ -2,6 +2,7 @@ package service import ( "errors" + "github.com/go-admin-team/go-admin-core/sdk/config" "gorm.io/gorm/clause" @@ -102,12 +103,21 @@ func (e *SysRole) Insert(c *dto.SysRoleInsertReq, cb *casbin.SyncedEnforcer) err return err } + mp := make(map[string]interface{}, 0) + polices := make([][]string, 0) for _, menu := range dataMenu { for _, api := range menu.SysApi { - _, err = cb.AddNamedPolicy("p", data.RoleKey, api.Path, api.Action) + if mp[data.RoleKey+"-"+api.Path+"-"+api.Action] != "" { + mp[data.RoleKey+"-"+api.Path+"-"+api.Action] = "" + polices = append(polices, []string{data.RoleKey, api.Path, api.Action}) + } } } - _ = cb.SavePolicy() + _, err = cb.AddNamedPolicies("p", polices) + if err != nil { + return err + } + //if len(c.MenuIds) > 0 { // s := SysRoleMenu{} // s.Orm = e.Orm @@ -176,12 +186,12 @@ func (e *SysRole) Update(c *dto.SysRoleUpdateReq, cb *casbin.SyncedEnforcer) err if err != nil { return err } - _ = cb.SavePolicy() + return nil } // Remove 删除SysRole -func (e *SysRole) Remove(c *dto.SysRoleDeleteReq) error { +func (e *SysRole) Remove(c *dto.SysRoleDeleteReq, cb *casbin.SyncedEnforcer) error { var err error tx := e.Orm if config.DatabaseConfig.Driver != "sqlite3" { @@ -205,6 +215,9 @@ func (e *SysRole) Remove(c *dto.SysRoleDeleteReq) error { if db.RowsAffected == 0 { return errors.New("无权更新该数据") } + + _, _ = cb.RemoveFilteredPolicy(0, model.RoleKey) + return nil }