feat: M3-M7 全模块落地 + 集成接线
- M3 认证/权限/审计/限流 + 全部 REST 接口 - M4 管理面板(MIUIx + 成绩录入/积分榜下钻/大屏控制) - M5a 大屏页面(六页 + 明细覆盖层 + 缩放适配) - M6 WebSocket 实时同步中心 - M7 xlsx 导出 + 赛事包 zip + 备份 - 规则包 YAML 导入导出(差异预览) - 字体 vendor 子集化(4 套 x2 字重) - 集成:realtime/export/rules 接入 main+httpapi;backup 子命令 - 修复:中间件包装 ResponseWriter 丢失 Hijacker,导致 WS 握手 501
This commit is contained in:
1 parent
d0e3b93e76
commit
bc8b1ee6c0
145 files changed
+25159
-321
No files matched your search
@@ -0,0 +1,49 @@
|
||||
// Package auth 提供用户、会话与权限模型。
|
||||
//
|
||||
// 角色是包含关系:admin ⊇ recorder ⊇ guest;guest 是「未登录」的默认身份,
|
||||
// 不落库(见 devdocs/08-安全与可靠性 第 2 节)。
|
||||
package auth
|
||||
|
||||
import "strings"
|
||||
|
||||
// Role 是权限角色。
|
||||
type Role string
|
||||
|
||||
const (
|
||||
// RoleGuest 未登录访客:只读赛事数据,禁读系统配置。
|
||||
RoleGuest Role = "guest"
|
||||
// RoleRecorder 记录员:guest 全部 + 录入、发布、撤销、大屏控制。
|
||||
RoleRecorder Role = "recorder"
|
||||
// RoleAdmin 管理员:recorder 全部 + 系统配置、审计、备份。
|
||||
RoleAdmin Role = "admin"
|
||||
)
|
||||
|
||||
func roleRank(r Role) int {
|
||||
switch r {
|
||||
case RoleAdmin:
|
||||
return 2
|
||||
case RoleRecorder:
|
||||
return 1
|
||||
default:
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
// Allows 报告 r 是否覆盖 need,即 admin ⊇ recorder ⊇ guest。
|
||||
func (r Role) Allows(need Role) bool {
|
||||
return roleRank(r) >= roleRank(need)
|
||||
}
|
||||
|
||||
// ParseRole 把数据库里的角色字符串收敛成已知角色;未知值按最低权限处理。
|
||||
func ParseRole(s string) Role {
|
||||
switch Role(strings.ToLower(strings.TrimSpace(s))) {
|
||||
case RoleAdmin:
|
||||
return RoleAdmin
|
||||
case RoleRecorder:
|
||||
return RoleRecorder
|
||||
default:
|
||||
return RoleGuest
|
||||
}
|
||||
}
|
||||
|
||||
func (r Role) String() string { return string(r) }
|
||||
Reference in new issue
Block a user