From 0d6b347d7e1ad52ac723065d704869c3376428c3 Mon Sep 17 00:00:00 2001 From: zhouxixi-dev Date: Thu, 23 Jun 2022 15:47:55 +0800 Subject: [PATCH] =?UTF-8?q?bugfix:=20https://github.com/go-admin-team/go-a?= =?UTF-8?q?dmin/issues/539=20=E4=BF=AE=E5=A4=8D=E8=A7=92=E8=89=B2=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E3=80=81=E4=BF=AE=E6=94=B9=E6=97=B6=EF=BC=8Csys=5Fcas?= =?UTF-8?q?bin=5Frule=E8=A1=A8drop=EF=BC=8C=E7=84=B6=E5=90=8E=E9=87=8D?= =?UTF-8?q?=E6=96=B0create=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/apis/sys_role.go | 25 +++++++------------------ app/admin/service/sys_role.go | 21 +++++++++++++++++---- 2 files changed, 24 insertions(+), 22 deletions(-) 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 }