后端修改权限和折叠功能
CI / verify (pull_request) Has been cancelled

This commit is contained in:
2026-07-23 14:38:52 +08:00
parent 6479365d6a
commit 75765bf9d4
11 changed files with 375 additions and 54 deletions
+71 -17
View File
@@ -1,24 +1,67 @@
/** HQ 权限目录(权限分配页勾选源) */
export const HQ_PERMISSION_CATALOG = [
{ key: 'dashboard', label: '概览' },
{ key: 'users', label: '用户管理' },
{ key: 'wechat_bindings', label: '微信绑定' },
{ key: 'products', label: '商品管理' },
{ key: 'orders', label: '订单管理' },
{ key: 'stores', label: '门店管理' },
{ key: 'partners', label: '开城管理' },
{ key: 'benefit', label: '好客权益' },
{ key: 'deliveries', label: '配送单' },
{ key: 'tickets', label: '工单中心' },
{ key: 'invoices', label: '发票管理' },
{ key: 'resources', label: 'OSS 资源库' },
{ key: 'logs', label: '日志' },
{ key: 'hq_permissions', label: '权限分配' },
{ key: 'hq_accounts', label: 'HQ 账户' },
{ key: 'system_settings', label: '系统设置' },
{ key: 'dashboard', label: '概览', group: '业务' },
{ key: 'users', label: '用户管理', group: '业务' },
{ key: 'wechat_bindings', label: '微信绑定', group: '业务' },
{ key: 'products', label: '商品管理', group: '业务' },
{ key: 'orders', label: '订单管理', group: '业务' },
{ key: 'promo_codes', label: '推广码', group: '业务' },
{ key: 'stores', label: '门店管理', group: '业务' },
{ key: 'partners', label: '开城管理', group: '业务' },
{ key: 'finance', label: '财务', group: '业务' },
{ key: 'benefit', label: '好客权益', group: '业务' },
{ key: 'deliveries', label: '配送单', group: '业务' },
{ key: 'tickets', label: '工单中心', group: '业务' },
{ key: 'invoices', label: '发票管理', group: '业务' },
{ key: 'resources', label: 'OSS 资源库', group: '业务' },
{ key: 'logs', label: '日志', group: '业务' },
{ key: 'hq_permissions', label: '权限分配', group: '管理' },
{ key: 'hq_accounts', label: 'HQ 账户', group: '管理' },
{ key: 'system_settings_feature', label: '功能开关', group: '系统设置' },
{ key: 'system_settings_sms', label: '短信', group: '系统设置' },
{ key: 'system_settings_wechat', label: '微信', group: '系统设置' },
{ key: 'system_settings_wechat_mini', label: '微信小程序', group: '系统设置' },
{ key: 'system_settings_oss', label: '对象存储 OSS', group: '系统设置' },
{ key: 'system_settings_app', label: '应用链接', group: '系统设置' },
{ key: 'system_settings_deploy', label: '发布部署', group: '系统设置' },
] as const;
export type HqPermissionKey = (typeof HQ_PERMISSION_CATALOG)[number]['key'];
/** 系统配置 registry group → 权限 key */
export const SYSTEM_CONFIG_GROUP_PERMISSION: Record<string, HqPermissionKey> = {
feature: 'system_settings_feature',
sms: 'system_settings_sms',
wechat: 'system_settings_wechat',
wechat_mini: 'system_settings_wechat_mini',
oss: 'system_settings_oss',
app: 'system_settings_app',
deploy: 'system_settings_deploy',
};
export const SYSTEM_SETTINGS_PERMISSION_KEYS = Object.values(
SYSTEM_CONFIG_GROUP_PERMISSION,
) as HqPermissionKey[];
/** 旧版单一 system_settings 权限:视为拥有全部系统设置分组(兼容存量角色配置) */
export const LEGACY_SYSTEM_SETTINGS_KEY = 'system_settings';
export function expandHqPermissionKeys(keys: string[]): HqPermissionKey[] {
const set = new Set<string>(keys);
if (set.has(LEGACY_SYSTEM_SETTINGS_KEY)) {
for (const k of SYSTEM_SETTINGS_PERMISSION_KEYS) set.add(k);
set.delete(LEGACY_SYSTEM_SETTINGS_KEY);
}
return [...set].filter((k): k is HqPermissionKey =>
HQ_PERMISSION_CATALOG.some((p) => p.key === k),
);
}
export function hasAnySystemSettingsPermission(keys: string[]): boolean {
const expanded = expandHqPermissionKeys(keys);
return SYSTEM_SETTINGS_PERMISSION_KEYS.some((k) => expanded.includes(k));
}
export const HQ_ADMIN_ROLES = [
{ value: 'SUPER_ADMIN', label: '超级管理员' },
{ value: 'OPS', label: '运营' },
@@ -34,6 +77,7 @@ export const HQ_ROLE_DEFAULT_PERMISSIONS: Record<string, HqPermissionKey[]> = {
'wechat_bindings',
'products',
'orders',
'promo_codes',
'stores',
'partners',
'benefit',
@@ -42,7 +86,17 @@ export const HQ_ROLE_DEFAULT_PERMISSIONS: Record<string, HqPermissionKey[]> = {
'invoices',
'resources',
'logs',
'system_settings_wechat_mini',
],
FINANCE: [
'dashboard',
'orders',
'stores',
'partners',
'finance',
'benefit',
'invoices',
'logs',
],
FINANCE: ['dashboard', 'orders', 'stores', 'partners', 'benefit', 'invoices', 'logs'],
CUSTOMER_SERVICE: ['dashboard', 'users', 'orders', 'tickets', 'invoices', 'logs'],
};