163 lines
4.8 KiB
Python
163 lines
4.8 KiB
Python
"""Fixed permission catalog for menus and actions.
|
|
|
|
UI and APIs only select from this list; new codes must be added in code.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
|
|
# Menu visibility
|
|
MENU_DASHBOARD = "menu.dashboard"
|
|
MENU_ACCOUNTS = "menu.accounts"
|
|
MENU_MESSAGES = "menu.messages"
|
|
MENU_RULES = "menu.rules"
|
|
MENU_LOGS = "menu.logs"
|
|
MENU_RECEIVED_MESSAGES = "menu.received_messages"
|
|
MENU_SYSTEM_LOGS = "menu.system_logs"
|
|
MENU_DOWNLOAD = "menu.download"
|
|
MENU_HELP = "menu.help"
|
|
MENU_USERS = "menu.users"
|
|
MENU_SETTINGS = "menu.settings"
|
|
MENU_DESKTOP_UPDATE = "menu.desktop_update"
|
|
MENU_PAYMENT_SETTINGS = "menu.payment_settings"
|
|
MENU_PAYMENT_ORDERS = "menu.payment_orders"
|
|
|
|
# Actions
|
|
ACCOUNTS_WRITE = "accounts.write"
|
|
MESSAGES_WRITE = "messages.write"
|
|
RULES_WRITE = "rules.write"
|
|
LOGS_READ = "logs.read"
|
|
RECEIVED_MESSAGES_READ = "received_messages.read"
|
|
SYSTEM_LOGS_READ = "system_logs.read"
|
|
USERS_MANAGE = "users.manage"
|
|
SETTINGS_MANAGE = "settings.manage"
|
|
DESKTOP_MANAGE = "desktop.manage"
|
|
PAYMENTS_MANAGE = "payments.manage"
|
|
ORDERS_READ = "orders.read"
|
|
|
|
ALL_PERMISSIONS: tuple[str, ...] = (
|
|
MENU_DASHBOARD,
|
|
MENU_ACCOUNTS,
|
|
MENU_MESSAGES,
|
|
MENU_RULES,
|
|
MENU_LOGS,
|
|
MENU_RECEIVED_MESSAGES,
|
|
MENU_SYSTEM_LOGS,
|
|
MENU_DOWNLOAD,
|
|
MENU_HELP,
|
|
MENU_USERS,
|
|
MENU_SETTINGS,
|
|
MENU_DESKTOP_UPDATE,
|
|
MENU_PAYMENT_SETTINGS,
|
|
MENU_PAYMENT_ORDERS,
|
|
ACCOUNTS_WRITE,
|
|
MESSAGES_WRITE,
|
|
RULES_WRITE,
|
|
LOGS_READ,
|
|
RECEIVED_MESSAGES_READ,
|
|
SYSTEM_LOGS_READ,
|
|
USERS_MANAGE,
|
|
SETTINGS_MANAGE,
|
|
DESKTOP_MANAGE,
|
|
PAYMENTS_MANAGE,
|
|
ORDERS_READ,
|
|
)
|
|
|
|
PERMISSION_SET = frozenset(ALL_PERMISSIONS)
|
|
|
|
WRITE_PERMISSIONS = frozenset(
|
|
{
|
|
ACCOUNTS_WRITE,
|
|
MESSAGES_WRITE,
|
|
RULES_WRITE,
|
|
}
|
|
)
|
|
|
|
_PERMISSION_META: dict[str, dict[str, str]] = {
|
|
MENU_DASHBOARD: {"group": "menu", "label": "数据概览"},
|
|
MENU_ACCOUNTS: {"group": "menu", "label": "账号管理"},
|
|
MENU_MESSAGES: {"group": "menu", "label": "私信收发"},
|
|
MENU_RULES: {"group": "menu", "label": "自动回复规则"},
|
|
MENU_LOGS: {"group": "menu", "label": "回复日志面板"},
|
|
MENU_RECEIVED_MESSAGES: {"group": "menu", "label": "接收消息日志"},
|
|
MENU_SYSTEM_LOGS: {"group": "menu", "label": "系统诊断日志"},
|
|
MENU_DOWNLOAD: {"group": "menu", "label": "软件下载"},
|
|
MENU_HELP: {"group": "menu", "label": "帮助中心"},
|
|
MENU_USERS: {"group": "menu", "label": "用户与角色"},
|
|
MENU_SETTINGS: {"group": "menu", "label": "系统设置"},
|
|
MENU_DESKTOP_UPDATE: {"group": "menu", "label": "桌面端升级"},
|
|
MENU_PAYMENT_SETTINGS: {"group": "menu", "label": "支付配置"},
|
|
MENU_PAYMENT_ORDERS: {"group": "menu", "label": "我的订单"},
|
|
ACCOUNTS_WRITE: {"group": "action", "label": "账号写操作(启动/停止/改凭证/删除)"},
|
|
MESSAGES_WRITE: {"group": "action", "label": "发送私信"},
|
|
RULES_WRITE: {"group": "action", "label": "编辑自动回复规则"},
|
|
LOGS_READ: {"group": "action", "label": "查看回复日志"},
|
|
RECEIVED_MESSAGES_READ: {"group": "action", "label": "查看接收消息日志"},
|
|
SYSTEM_LOGS_READ: {"group": "action", "label": "查看系统诊断日志"},
|
|
USERS_MANAGE: {"group": "action", "label": "管理用户与角色"},
|
|
SETTINGS_MANAGE: {"group": "action", "label": "管理系统设置"},
|
|
DESKTOP_MANAGE: {"group": "action", "label": "管理桌面端升级"},
|
|
PAYMENTS_MANAGE: {"group": "action", "label": "管理支付配置"},
|
|
ORDERS_READ: {"group": "action", "label": "查看我的订单"},
|
|
}
|
|
|
|
OPERATOR_PERMISSIONS: tuple[str, ...] = (
|
|
MENU_DASHBOARD,
|
|
MENU_ACCOUNTS,
|
|
MENU_MESSAGES,
|
|
MENU_RULES,
|
|
MENU_LOGS,
|
|
MENU_RECEIVED_MESSAGES,
|
|
MENU_DOWNLOAD,
|
|
MENU_HELP,
|
|
MENU_PAYMENT_ORDERS,
|
|
ACCOUNTS_WRITE,
|
|
MESSAGES_WRITE,
|
|
RULES_WRITE,
|
|
LOGS_READ,
|
|
RECEIVED_MESSAGES_READ,
|
|
ORDERS_READ,
|
|
)
|
|
|
|
VIEWER_PERMISSIONS: tuple[str, ...] = (
|
|
MENU_DASHBOARD,
|
|
MENU_ACCOUNTS,
|
|
MENU_MESSAGES,
|
|
MENU_RULES,
|
|
MENU_LOGS,
|
|
MENU_RECEIVED_MESSAGES,
|
|
MENU_DOWNLOAD,
|
|
MENU_HELP,
|
|
LOGS_READ,
|
|
RECEIVED_MESSAGES_READ,
|
|
)
|
|
|
|
|
|
def normalize_permissions(codes: list[str] | tuple[str, ...] | None) -> list[str]:
|
|
if not codes:
|
|
return []
|
|
seen: set[str] = set()
|
|
result: list[str] = []
|
|
for code in codes:
|
|
value = str(code or "").strip()
|
|
if not value or value not in PERMISSION_SET or value in seen:
|
|
continue
|
|
seen.add(value)
|
|
result.append(value)
|
|
return result
|
|
|
|
|
|
def permission_catalog() -> dict[str, Any]:
|
|
menus = []
|
|
actions = []
|
|
for code in ALL_PERMISSIONS:
|
|
meta = _PERMISSION_META[code]
|
|
item = {"code": code, "label": meta["label"]}
|
|
if meta["group"] == "menu":
|
|
menus.append(item)
|
|
else:
|
|
actions.append(item)
|
|
return {"menus": menus, "actions": actions}
|