mirror of
https://gitee.com/xiangheng/x_admin.git
synced 2025-10-08 01:20:57 +08:00
分层中
This commit is contained in:
111
server/service/systemService/permService.go
Normal file
111
server/service/systemService/permService.go
Normal file
@@ -0,0 +1,111 @@
|
||||
package systemService
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
"x_admin/config"
|
||||
"x_admin/core"
|
||||
"x_admin/core/response"
|
||||
"x_admin/model/system_model"
|
||||
"x_admin/util"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
var PermService = NewSystemAuthPermService()
|
||||
|
||||
// NewSystemAuthPermService 初始化
|
||||
func NewSystemAuthPermService() *systemAuthPermService {
|
||||
db := core.GetDB()
|
||||
return &systemAuthPermService{db: db}
|
||||
}
|
||||
|
||||
// systemAuthPermService 系统权限服务实现类
|
||||
type systemAuthPermService struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
// SelectMenuIdsByRoleId 根据角色ID获取菜单ID
|
||||
func (service systemAuthPermService) SelectMenuIdsByRoleId(roleId uint) (menuIds []uint, e error) {
|
||||
var role system_model.SystemAuthRole
|
||||
err := service.db.Where("id = ? AND is_disable = ?", roleId, 0).Limit(1).First(&role).Error
|
||||
if e = response.CheckErr(err, "角色不存在"); e != nil {
|
||||
return []uint{}, e
|
||||
}
|
||||
var perms []system_model.SystemAuthPerm
|
||||
err = service.db.Where("role_id = ?", role.ID).Find(&perms).Error
|
||||
if e = response.CheckErr(err, "查询角色的菜单失败"); e != nil {
|
||||
return []uint{}, e
|
||||
}
|
||||
for _, perm := range perms {
|
||||
menuIds = append(menuIds, perm.MenuId)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// CacheRoleMenusByRoleId 缓存角色菜单
|
||||
func (service systemAuthPermService) CacheRoleMenusByRoleId(roleId uint) (e error) {
|
||||
var perms []system_model.SystemAuthPerm
|
||||
err := service.db.Where("role_id = ?", roleId).Find(&perms).Error
|
||||
if e = response.CheckErr(err, "查询角色的菜单失败"); e != nil {
|
||||
return
|
||||
}
|
||||
var menuIds []uint
|
||||
for _, perm := range perms {
|
||||
menuIds = append(menuIds, perm.MenuId)
|
||||
}
|
||||
var menus []system_model.SystemAuthMenu
|
||||
err = service.db.Where(
|
||||
"is_disable = ? and id in ? and menu_type in ?", 0, menuIds, []string{"C", "A"}).Order(
|
||||
"menu_sort, id").Find(&menus).Error
|
||||
if e = response.CheckErr(err, "查找角色菜单失败"); e != nil {
|
||||
return
|
||||
}
|
||||
var menuArray []string
|
||||
for _, menu := range menus {
|
||||
if menu.Perms != "" {
|
||||
menuArray = append(menuArray, strings.Trim(menu.Perms, ""))
|
||||
}
|
||||
}
|
||||
util.RedisUtil.HSet(config.AdminConfig.BackstageRolesKey, strconv.FormatUint(uint64(roleId), 10), strings.Join(menuArray, ","), 0)
|
||||
return
|
||||
}
|
||||
|
||||
// BatchSaveByMenuIds 批量写入角色菜单
|
||||
func (service systemAuthPermService) BatchSaveByMenuIds(roleId uint, menuIds string, db *gorm.DB) (e error) {
|
||||
if menuIds == "" {
|
||||
return
|
||||
}
|
||||
if db == nil {
|
||||
db = service.db
|
||||
}
|
||||
err := db.Transaction(func(tx *gorm.DB) error {
|
||||
var perms []system_model.SystemAuthPerm
|
||||
for _, menuIdStr := range strings.Split(menuIds, ",") {
|
||||
menuId, _ := strconv.ParseUint(menuIdStr, 10, 32)
|
||||
perms = append(perms, system_model.SystemAuthPerm{ID: util.ToolsUtil.MakeUuid(), RoleId: roleId, MenuId: uint(menuId)})
|
||||
}
|
||||
txErr := tx.Create(&perms).Error
|
||||
var te = response.CheckErr(txErr, "BatchSaveByMenuIds Create in tx err")
|
||||
return te
|
||||
})
|
||||
e = response.CheckErr(err, "BatchSaveByMenuIds Transaction err")
|
||||
return
|
||||
}
|
||||
|
||||
// BatchDeleteByRoleId 批量删除角色菜单(根据角色ID)
|
||||
func (service systemAuthPermService) BatchDeleteByRoleId(roleId uint, db *gorm.DB) (e error) {
|
||||
if db == nil {
|
||||
db = service.db
|
||||
}
|
||||
err := db.Delete(&system_model.SystemAuthPerm{}, "role_id = ?", roleId).Error
|
||||
e = response.CheckErr(err, "BatchDeleteByRoleId Delete err")
|
||||
return
|
||||
}
|
||||
|
||||
// BatchDeleteByMenuId 批量删除角色菜单(根据菜单ID)
|
||||
func (service systemAuthPermService) BatchDeleteByMenuId(menuId uint) (e error) {
|
||||
err := service.db.Delete(&system_model.SystemAuthPerm{}, "menu_id = ?", menuId).Error
|
||||
e = response.CheckErr(err, "BatchDeleteByMenuId Delete err")
|
||||
return
|
||||
}
|
Reference in New Issue
Block a user