Files
track-LICA/backend/app/core/roles.py

32 lines
1.2 KiB
Python
Raw Normal View History

"""角色定义与管理员判定 —— 单一事实来源
背景角色字符串此前散落在至少三处 task_service.ADMIN_ROLES
products.py 的内联判断以及前端 constants/task.ts同一份规则抄多份的后果
已经发生过前端 constants/task.ts:233 的注释记录了一次移动端只判了
SUPER_ADMIN漏了 SUPERVISOR导致主管被误挡的事故
本模块把**角色常量与管理员判定**先收敛到一处供后端统一引用
完整的角色 × 权限点可配置矩阵是后续工作但任何推进都应从这里出发
不要再新增第四份副本
"""
from __future__ import annotations
SUPER_ADMIN = "SUPER_ADMIN"
SUPERVISOR = "SUPERVISOR"
# 注意MOM 登录返回的默认角色是小写 operator见 auth_service.login
OPERATOR = "OPERATOR"
# 管理员角色:可执行收口、审计查看等高权限动作
ADMIN_ROLES: frozenset[str] = frozenset({SUPER_ADMIN, SUPERVISOR})
ROLE_LABELS: dict[str, str] = {
SUPER_ADMIN: "超级管理员",
SUPERVISOR: "主管",
OPERATOR: "操作员",
}
def is_admin(role: str | None) -> bool:
"""role 为 None / 未知值一律视为无权限fail-closed不做兜底放行"""
return role in ADMIN_ROLES