1 Star 1 Fork 1

xiaoyutab / xgotool

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
get_role_auth.go 1.13 KB
一键复制 编辑 原始数据 按行查看 历史
xiaoyutab 提交于 2024-01-17 15:14 . 代码优化
package xauth
import (
"gitee.com/xiaoyutab/xgotool/xnum"
)
// 获取角色权限
//
// rid 角色ID
func getRoleAuth(rid []uint) []uint {
if len(rid) == 0 {
return nil
}
_cache.Lock()
defer _cache.Unlock()
if v, ok := _cache.RoleAuth[key(rid)]; ok {
return v
}
mod := []uint{}
// 从数据库中进行查询
err := _default.DB.Table(_default.RoleAuthName).Select("auth_id").Where("role_id in ?", rid).Find(&mod).Error
if err != nil {
errFun("角色权限获取失败", err)
return nil
}
l := len(mod)
if l == 0 {
return nil
}
// 进行子权限查询【即如果授权主菜单ID的话,则子菜单ID自动授予权限】
for {
ms := []uint{}
err := _default.DB.Table(_default.AuthorityName).Select("id").Where("id in ? or fid in ?", mod).Find(&ms).Error
if err != nil {
errFun("角色权限获取失败-子", err)
break
}
if len(ms) == l {
// 查询前后数据量,即无新增子ID信息
break
}
// 将MS中新增的ID追加到mod权限中去
for i := 0; i < len(ms); i++ {
if !xnum.InArray(ms[i], mod) {
mod = append(mod, ms[i])
}
}
}
_cache.RoleAuth[key(rid)] = mod
return mod
}
Go
1
https://gitee.com/xiaoyutab/xgotool.git
git@gitee.com:xiaoyutab/xgotool.git
xiaoyutab
xgotool
xgotool
v0.3.9

搜索帮助