You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.2 KiB

package cacheApi
import (
"epur-pay/model"
"epur-pay/pkg/rds"
"epur-pay/pkg/utils"
"fmt"
"sync"
)
type RolePermission struct {
Map *sync.Map
duplicate *RolePermission
}
type MenuPermission struct {
RoleId int64 `gorm:"column:role_id" json:"roleId"`
Permission string `gorm:"column:permission" json:"permission"`
}
func (p *RolePermission) Refresh() *RolePermission {
permission := []MenuPermission{}
utils.Error(rds.DB.Raw(`
select rm.role_id, permission from role_menu rm inner join menu as m
on rm .menu_id = m.id
`).Scan(&permission).Error)
p.duplicate = &RolePermission{}
p.duplicate.Map = &sync.Map{}
for _, v := range permission {
roleId := fmt.Sprintf("%d", v.RoleId)
if row, ok := p.duplicate.Map.Load(roleId); ok {
row = append(row.(model.ArryString), v.Permission)
p.duplicate.Map.Store(roleId, row)
} else {
p.duplicate.Map.Store(roleId, model.ArryString{v.Permission})
}
}
return p.duplicate
}
// 验证是否有权限
func (p *RolePermission) Check(roleAttr model.Arry, permission string) bool {
// 用户支持多个角色
for i := range roleAttr {
if row, ok := p.Map.Load(fmt.Sprintf("%d", roleAttr[i])); ok {
if row.(model.ArryString).Of(permission) {
return true
}
}
}
return false
}