diff --git a/src/auth/permissions.ts b/src/auth/permissions.ts new file mode 100644 index 0000000..8e5610d --- /dev/null +++ b/src/auth/permissions.ts @@ -0,0 +1,54 @@ +/** Mirror of API permission catalog for SuperAdmin web */ +export const PERMISSIONS = [ + 'sms:read', + 'sms:write', + 'servers:read', + 'servers:write', + 'plugins:read', + 'plugins:write', + 'support:read', + 'support:write', + 'hamkar:read', + 'hamkar:write', + 'khanegi:read', + 'khanegi:write', + 'admins:read', + 'admins:write', + 'audit:read', + 'settings:write', +] as const + +export type PermissionCode = (typeof PERMISSIONS)[number] + +export type PermissionModule = { + key: string + label: string + read?: PermissionCode + write?: PermissionCode +} + +export const PERMISSION_MODULES: PermissionModule[] = [ + { key: 'sms', label: 'پیامک', read: 'sms:read', write: 'sms:write' }, + { key: 'servers', label: 'سرور', read: 'servers:read', write: 'servers:write' }, + { key: 'plugins', label: 'افزونه', read: 'plugins:read', write: 'plugins:write' }, + { key: 'support', label: 'پشتیبانی', read: 'support:read', write: 'support:write' }, + { key: 'hamkar', label: 'همکار', read: 'hamkar:read', write: 'hamkar:write' }, + { key: 'khanegi', label: 'خانگی', read: 'khanegi:read', write: 'khanegi:write' }, + { key: 'admins', label: 'مدیران', read: 'admins:read', write: 'admins:write' }, + { key: 'audit', label: 'لاگ', read: 'audit:read' }, + { key: 'settings', label: 'تنظیمات حساس', write: 'settings:write' }, +] + +export function normalizePermissionList(codes: string[]): PermissionCode[] { + const set = new Set() + for (const raw of codes) { + const code = String(raw || '').trim() as PermissionCode + if (!(PERMISSIONS as readonly string[]).includes(code)) continue + set.add(code) + if (code.endsWith(':write')) { + const read = code.replace(/:write$/, ':read') as PermissionCode + if ((PERMISSIONS as readonly string[]).includes(read)) set.add(read) + } + } + return [...set] +} diff --git a/src/layouts/AppLayout.vue b/src/layouts/AppLayout.vue index dc56cd7..34ee4be 100644 --- a/src/layouts/AppLayout.vue +++ b/src/layouts/AppLayout.vue @@ -1,5 +1,5 @@