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