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
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
|
|
}
|