feat: add role-based permission system
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
export type Role =
|
||||
| 'sysadmin'
|
||||
| 'director'
|
||||
| 'foster_coordinator'
|
||||
| 'volunteer_manager'
|
||||
| 'vet_liaison'
|
||||
| 'content_editor'
|
||||
| 'applications_manager'
|
||||
| 'viewer'
|
||||
| 'foster';
|
||||
|
||||
export type Permission =
|
||||
| 'dashboard'
|
||||
| 'pets'
|
||||
| 'pets_view'
|
||||
| 'applications'
|
||||
| 'sponsors'
|
||||
| 'donations'
|
||||
| 'expenses'
|
||||
| 'vets'
|
||||
| 'medical'
|
||||
| 'events'
|
||||
| 'content'
|
||||
| 'volunteers'
|
||||
| 'users'
|
||||
| 'shop'
|
||||
| 'import'
|
||||
| 'system';
|
||||
|
||||
const ROLE_PERMISSIONS: Record<Role, Permission[]> = {
|
||||
sysadmin: [
|
||||
'dashboard', 'pets', 'pets_view', 'applications', 'sponsors',
|
||||
'donations', 'expenses', 'vets', 'medical', 'events', 'content',
|
||||
'volunteers', 'users', 'shop', 'import', 'system'
|
||||
],
|
||||
director: [
|
||||
'dashboard', 'pets', 'pets_view', 'applications', 'sponsors',
|
||||
'donations', 'expenses', 'vets', 'medical', 'events', 'content',
|
||||
'volunteers', 'users', 'shop', 'import'
|
||||
],
|
||||
foster_coordinator: ['dashboard', 'pets', 'pets_view', 'applications'],
|
||||
volunteer_manager: ['dashboard', 'volunteers', 'events'],
|
||||
vet_liaison: ['dashboard', 'pets', 'pets_view', 'vets', 'medical', 'expenses'],
|
||||
content_editor: ['dashboard', 'sponsors', 'content', 'events'],
|
||||
applications_manager: ['dashboard', 'applications', 'pets_view'],
|
||||
viewer: ['dashboard'],
|
||||
foster: ['dashboard']
|
||||
};
|
||||
|
||||
export function hasPermission(role: Role, permission: Permission): boolean {
|
||||
return ROLE_PERMISSIONS[role]?.includes(permission) ?? false;
|
||||
}
|
||||
|
||||
export function canViewPets(role: Role): boolean {
|
||||
return hasPermission(role, 'pets') || hasPermission(role, 'pets_view');
|
||||
}
|
||||
Reference in New Issue
Block a user