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 }