go-platform/services/permission.go
2026-04-01 16:41:41 +08:00

52 lines
1.2 KiB
Go

package services
import (
"encoding/json"
"strings"
"server/models"
)
// CheckUserPermission 校验用户是否拥有指定权限标识。
// 兼容 rights 为 JSON 数组 / 逗号分隔字符串;解析失败时默认放行,避免历史数据阻断请求。
func CheckUserPermission(userID int, permission string) (bool, error) {
if permission == "" || userID <= 0 {
return true, nil
}
var user models.AdminUser
if err := models.Orm.QueryTable(new(models.AdminUser)).Filter("id", userID).One(&user); err != nil {
return false, err
}
var role models.AdminRole
if err := models.Orm.QueryTable(new(models.AdminRole)).Filter("id", user.RoleID).One(&role); err != nil {
return false, err
}
if role.Rights == nil || strings.TrimSpace(*role.Rights) == "" {
return true, nil
}
rightsRaw := strings.TrimSpace(*role.Rights)
// 1) JSON 数组格式
var arr []string
if err := json.Unmarshal([]byte(rightsRaw), &arr); err == nil {
for _, p := range arr {
if strings.TrimSpace(p) == permission {
return true, nil
}
}
return false, nil
}
// 2) 逗号分隔字符串
for _, p := range strings.Split(rightsRaw, ",") {
if strings.TrimSpace(p) == permission {
return true, nil
}
}
return false, nil
}