From 68accd5448b743d18b455ad28c31c71359f742fd Mon Sep 17 00:00:00 2001 From: wanghaima Date: Sun, 7 May 2023 19:33:00 +0800 Subject: [PATCH] =?UTF-8?q?fix=5Fedit=5Fmaster=5Frole=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/models/sys_role.go | 28 ++++++++++++++-------------- app/admin/service/dto/sys_role.go | 2 +- app/admin/service/sys_role.go | 12 +++++++++++- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/app/admin/models/sys_role.go b/app/admin/models/sys_role.go index 766af209..ee97f00d 100644 --- a/app/admin/models/sys_role.go +++ b/app/admin/models/sys_role.go @@ -3,19 +3,19 @@ package models import "go-admin/common/models" type SysRole struct { - RoleId int `json:"roleId" gorm:"primaryKey;autoIncrement"` // 角色编码 - RoleName string `json:"roleName" gorm:"size:128;"` // 角色名称 - Status string `json:"status" gorm:"size:4;"` // - RoleKey string `json:"roleKey" gorm:"size:128;"` //角色代码 - RoleSort int `json:"roleSort" gorm:""` //角色排序 - Flag string `json:"flag" gorm:"size:128;"` // - Remark string `json:"remark" gorm:"size:255;"` //备注 - Admin bool `json:"admin" gorm:"size:4;"` - DataScope string `json:"dataScope" gorm:"size:128;"` - Params string `json:"params" gorm:"-"` - MenuIds []int `json:"menuIds" gorm:"-"` - DeptIds []int `json:"deptIds" gorm:"-"` - SysDept []SysDept `json:"sysDept" gorm:"many2many:sys_role_dept;foreignKey:RoleId;joinForeignKey:role_id;references:DeptId;joinReferences:dept_id;"` + RoleId int `json:"roleId" gorm:"primaryKey;autoIncrement"` // 角色编码 + RoleName string `json:"roleName" gorm:"size:128;"` // 角色名称 + Status string `json:"status" gorm:"size:4;"` // 状态 1禁用 2正常 + RoleKey string `json:"roleKey" gorm:"size:128;"` //角色代码 + RoleSort int `json:"roleSort" gorm:""` //角色排序 + Flag string `json:"flag" gorm:"size:128;"` // + Remark string `json:"remark" gorm:"size:255;"` //备注 + Admin bool `json:"admin" gorm:"size:4;"` + DataScope string `json:"dataScope" gorm:"size:128;"` + Params string `json:"params" gorm:"-"` + MenuIds []int `json:"menuIds" gorm:"-"` + DeptIds []int `json:"deptIds" gorm:"-"` + SysDept []SysDept `json:"sysDept" gorm:"many2many:sys_role_dept;foreignKey:RoleId;joinForeignKey:role_id;references:DeptId;joinReferences:dept_id;"` SysMenu *[]SysMenu `json:"sysMenu" gorm:"many2many:sys_role_menu;foreignKey:RoleId;joinForeignKey:role_id;references:MenuId;joinReferences:menu_id;"` models.ControlBy models.ModelTime @@ -32,4 +32,4 @@ func (e *SysRole) Generate() models.ActiveRecord { func (e *SysRole) GetId() interface{} { return e.RoleId -} \ No newline at end of file +} diff --git a/app/admin/service/dto/sys_role.go b/app/admin/service/dto/sys_role.go index 0fb31f5d..789b85e1 100644 --- a/app/admin/service/dto/sys_role.go +++ b/app/admin/service/dto/sys_role.go @@ -36,7 +36,7 @@ func (m *SysRoleGetPageReq) GetNeedSearch() interface{} { type SysRoleInsertReq struct { RoleId int `uri:"id" comment:"角色编码"` // 角色编码 RoleName string `form:"roleName" comment:"角色名称"` // 角色名称 - Status string `form:"status" comment:"状态"` // 状态 + Status string `form:"status" comment:"状态"` // 状态 1禁用 2正常 RoleKey string `form:"roleKey" comment:"角色代码"` // 角色代码 RoleSort int `form:"roleSort" comment:"角色排序"` // 角色排序 Flag string `form:"flag" comment:"标记"` // 标记 diff --git a/app/admin/service/sys_role.go b/app/admin/service/sys_role.go index fe82dbe1..f1fee74b 100644 --- a/app/admin/service/sys_role.go +++ b/app/admin/service/sys_role.go @@ -118,6 +118,7 @@ func (e *SysRole) Insert(c *dto.SysRoleInsertReq, cb *casbin.SyncedEnforcer) err return nil } + // 写入 sys_casbin_rule 权限表里 当前角色数据的记录 _, err = cb.AddNamedPolicies("p", polices) if err != nil { return err @@ -151,6 +152,7 @@ func (e *SysRole) Update(c *dto.SysRoleUpdateReq, cb *casbin.SyncedEnforcer) err } c.Generate(&model) model.SysMenu = &mlist + // 更新关联的数据,使用 FullSaveAssociations 模式 db := tx.Session(&gorm.Session{FullSaveAssociations: true}).Debug().Save(&model) if err = db.Error; err != nil { @@ -161,6 +163,7 @@ func (e *SysRole) Update(c *dto.SysRoleUpdateReq, cb *casbin.SyncedEnforcer) err return errors.New("无权更新该数据") } + // 清除 sys_casbin_rule 权限表里 当前角色的所有记录 _, err = cb.RemoveFilteredPolicy(0, model.RoleKey) if err != nil { e.Log.Errorf("delete policy error:%s", err) @@ -180,6 +183,8 @@ func (e *SysRole) Update(c *dto.SysRoleUpdateReq, cb *casbin.SyncedEnforcer) err if len(polices) <= 0 { return nil } + + // 写入 sys_casbin_rule 权限表里 当前角色数据的记录 _, err = cb.AddNamedPolicies("p", polices) if err != nil { return err @@ -203,6 +208,7 @@ func (e *SysRole) Remove(c *dto.SysRoleDeleteReq, cb *casbin.SyncedEnforcer) err } var model = models.SysRole{} tx.Preload("SysMenu").Preload("SysDept").First(&model, c.GetId()) + //删除 SysRole 时,同时删除角色所有 关联其它表 记录 (SysMenu 和 SysMenu) db := tx.Select(clause.Associations).Delete(&model) if err = db.Error; err != nil { @@ -213,6 +219,7 @@ func (e *SysRole) Remove(c *dto.SysRoleDeleteReq, cb *casbin.SyncedEnforcer) err return errors.New("无权更新该数据") } + // 清除 sys_casbin_rule 权限表里 当前角色的所有记录 _, _ = cb.RemoveFilteredPolicy(0, model.RoleKey) return nil @@ -250,6 +257,7 @@ func (e *SysRole) UpdateDataScope(c *dto.RoleDataScopeReq) *SysRole { var model = models.SysRole{} tx.Preload("SysDept").First(&model, c.RoleId) tx.Where("dept_id in ?", c.DeptIds).Find(&dlist) + // 删除SysRole 和 SysDept 的关联关系 err = tx.Model(&model).Association("SysDept").Delete(model.SysDept) if err != nil { e.Log.Errorf("delete SysDept error:%s", err) @@ -258,6 +266,7 @@ func (e *SysRole) UpdateDataScope(c *dto.RoleDataScopeReq) *SysRole { } c.Generate(&model) model.SysDept = dlist + // 更新关联的数据,使用 FullSaveAssociations 模式 db := tx.Model(&model).Session(&gorm.Session{FullSaveAssociations: true}).Debug().Save(&model) if err = db.Error; err != nil { e.Log.Errorf("db error:%s", err) @@ -288,6 +297,7 @@ func (e *SysRole) UpdateStatus(c *dto.UpdateStatusReq) error { var model = models.SysRole{} tx.First(&model, c.GetId()) c.Generate(&model) + // 更新关联的数据,使用 FullSaveAssociations 模式 db := tx.Session(&gorm.Session{FullSaveAssociations: true}).Debug().Save(&model) if err = db.Error; err != nil { e.Log.Errorf("db error:%s", err) @@ -334,7 +344,7 @@ func (e *SysRole) GetById(roleId int) ([]string, error) { } l := *model.SysMenu for i := 0; i < len(l); i++ { - if l[i].Permission != "" { + if l[i].Permission != "" { permissions = append(permissions, l[i].Permission) } }