feat: Implement role-based access control and enhance permissions system

This commit is contained in:
beilunyang
2024-12-27 13:35:29 +08:00
parent e815d1bec5
commit 5a7c17752a
22 changed files with 1888 additions and 39 deletions

28
app/lib/permissions.ts Normal file
View File

@@ -0,0 +1,28 @@
export const ROLES = {
EMPEROR: 'emperor',
KNIGHT: 'knight',
CIVILIAN: 'civilian',
} as const;
export type Role = typeof ROLES[keyof typeof ROLES];
export const PERMISSIONS = {
MANAGE_EMAIL: 'manage_email',
MANAGE_WEBHOOK: 'manage_webhook',
PROMOTE_USER: 'promote_user',
} as const;
export type Permission = typeof PERMISSIONS[keyof typeof PERMISSIONS];
export const ROLE_PERMISSIONS: Record<Role, Permission[]> = {
[ROLES.EMPEROR]: Object.values(PERMISSIONS),
[ROLES.KNIGHT]: [
PERMISSIONS.MANAGE_EMAIL,
PERMISSIONS.MANAGE_WEBHOOK,
],
[ROLES.CIVILIAN]: [],
} as const;
export function hasPermission(userRoles: Role[], permission: Permission): boolean {
return userRoles.some(role => ROLE_PERMISSIONS[role]?.includes(permission));
}