"""权限目录随代码发布;菜单、按钮和 API 共用同一操作码。""" MODULES = ( ("dashboard", "工作台", "首页", ("view",)), ("system:users", "系统管理", "用户管理", ("view", "create", "update", "delete", "status", "password")), ("system:roles", "系统管理", "角色管理", ("view", "create", "update", "delete", "status")), ("system:business_roles", "系统管理", "计提岗位", ("view", "create", "update", "delete", "status")), ("system:params", "系统管理", "计提参数", ("view", "update", "withdraw", "export", "preview")), ("system:settings", "系统管理", "公司信息", ("view", "update")), ("system:logs", "系统管理", "日志查询", ("view",)), ("system:monitor", "系统管理", "系统监控", ("view", "export")), ("base:personnel", "基础资料", "人员管理", ("view", "create", "update", "delete", "status", "regions", "plans")), ("base:products", "基础资料", "产品管理", ("view", "create", "update", "delete", "status")), ("base:customers", "基础资料", "客户管理", ("view", "create", "update", "delete", "rating", "ownership")), ("business:businesses", "业务数据", "业务管理", ("view", "create", "update", "delete", "status", "ownership")), ("business:shipments", "业务数据", "发货管理", ("view", "create", "update", "delete")), ("business:receipts", "业务数据", "回款管理", ("view", "create", "update", "delete")), ("business:ratings", "业务数据", "评级标准", ("view", "create", "update", "delete")), ("tplus", "T+ 对接", "采集与导入", ("view", "collect", "retry", "preview", "import", "facts", "export")), ("payroll", "绩效工资", "正式核算与分配", ("view", "prepare", "calculate", "allocation")), ("settlements", "绩效工资", "月度工资", ("view", "generate", "submit")), ("adjustments", "绩效工资", "工资调整", ("view", "create")), ("approvals", "绩效工资", "审核记录", ("view", "finance", "leader")), ("reports:business", "报表统计", "业务统计", ("view", "export")), ("reports:personal", "报表统计", "个人明细", ("view", "export")), ("reports:department", "报表统计", "部门汇总", ("view", "export")), ("reports:payments", "报表统计", "回款统计", ("view", "export")), ) ACTION_NAMES = { "view": "查看", "create": "新增", "update": "编辑", "delete": "删除", "status": "变更状态", "password": "重置密码", "regions": "维护区域", "plans": "维护计划", "rating": "客户评级", "ownership": "变更归属", "export": "导出", "preview": "预览", "withdraw": "撤回参数", "collect": "创建采集", "retry": "重试采集", "import": "执行导入", "facts": "维护补充资料", "prepare": "准备核算资料", "calculate": "核算与重算", "allocation": "修改工资分配", "generate": "生成工资", "submit": "提交审核", "finance": "财务复核", "leader": "领导审核", } CATALOG = { f"{module}:{action}": { "code": f"{module}:{action}", "module": module, "group": group, "module_name": name, "name": ACTION_NAMES[action], "action": action, "view_code": f"{module}:view", "admin_only": module in ( "system:users", "system:roles", "system:authorization", "system:monitor" ), "maker_required": False, } for module, group, name, actions in MODULES for action in actions } MAKER_ROLE = "payroll_maker" PAYROLL_WRITE_PERMISSIONS = frozenset( code for code, item in CATALOG.items() if item["module"] in ("payroll", "settlements", "adjustments") and item["action"] != "view" ) MAKER_PERMISSIONS = { code for code, item in CATALOG.items() if code in PAYROLL_WRITE_PERMISSIONS or item["module"] in ( "base:personnel", "base:products", "base:customers", "business:businesses", "business:shipments", "business:receipts", "business:ratings", "tplus", ) or (item["action"] == "view" and item["group"] in ("绩效工资", "报表统计")) } USER_PERMISSIONS = { code for code, item in CATALOG.items() if item["action"] == "view" and item["group"] in ("基础资料", "业务数据") } ROLE_DEFAULTS = { "admin": set(CATALOG), "user": USER_PERMISSIONS, "marketing_ops": USER_PERMISSIONS, "finance": USER_PERMISSIONS | { code for code, item in CATALOG.items() if (item["action"] == "view" and item["group"] in ("绩效工资", "报表统计", "工作台")) or (item["group"] == "报表统计" and item["action"] == "export") } | {"approvals:finance", "system:params:view", "system:params:preview"}, "leader": USER_PERMISSIONS | { code for code, item in CATALOG.items() if (item["action"] == "view" and item["group"] in ("绩效工资", "报表统计", "工作台")) or (item["group"] == "报表统计" and item["action"] == "export") } | {"approvals:leader", "system:params:view", "system:params:preview"}, MAKER_ROLE: MAKER_PERMISSIONS, }