73 lines
2.3 KiB
TypeScript
73 lines
2.3 KiB
TypeScript
export const USER_ROLES = ['admin', 'administrative', 'it', 'user'] as const
|
|
|
|
export type UserRole = (typeof USER_ROLES)[number]
|
|
|
|
export const PERMISSIONS = {
|
|
ASSETS_VIEW_ALL: 'assets.view_all',
|
|
ASSETS_VIEW_OWN: 'assets.view_own',
|
|
ASSETS_CREATE: 'assets.create',
|
|
ASSETS_IMPORT: 'assets.import',
|
|
ASSETS_CORRECT: 'assets.correct',
|
|
ASSETS_DELETE: 'assets.delete',
|
|
ASSETS_BORROW: 'assets.borrow',
|
|
ASSETS_TRANSFER: 'assets.transfer',
|
|
ASSETS_MAINTENANCE: 'assets.maintenance',
|
|
ASSETS_MOUNT: 'assets.mount',
|
|
ASSETS_PRINT_LABELS: 'assets.print_labels',
|
|
DISPOSALS_APPLY: 'disposals.apply',
|
|
DISPOSALS_APPROVE: 'disposals.approve',
|
|
DISPOSALS_COMPLETE: 'disposals.complete',
|
|
INVENTORY_MANAGE: 'inventory.manage',
|
|
NOTIFICATIONS_VIEW: 'notifications.view',
|
|
USERS_MANAGE: 'users.manage',
|
|
SYNC_MANAGE: 'sync.manage',
|
|
SYSTEM_SETTINGS: 'system.settings',
|
|
REPORTS_VIEW: 'reports.view'
|
|
} as const
|
|
|
|
export type Permission = (typeof PERMISSIONS)[keyof typeof PERMISSIONS]
|
|
|
|
const ALL_PERMISSIONS = Object.values(PERMISSIONS) as Permission[]
|
|
|
|
const ROLE_PERMISSIONS: Record<UserRole, readonly Permission[]> = {
|
|
admin: ALL_PERMISSIONS,
|
|
administrative: [
|
|
PERMISSIONS.ASSETS_VIEW_ALL,
|
|
PERMISSIONS.ASSETS_CREATE,
|
|
PERMISSIONS.ASSETS_IMPORT,
|
|
PERMISSIONS.ASSETS_CORRECT,
|
|
PERMISSIONS.ASSETS_PRINT_LABELS,
|
|
PERMISSIONS.DISPOSALS_APPROVE,
|
|
PERMISSIONS.DISPOSALS_COMPLETE,
|
|
PERMISSIONS.INVENTORY_MANAGE,
|
|
PERMISSIONS.NOTIFICATIONS_VIEW,
|
|
PERMISSIONS.REPORTS_VIEW
|
|
],
|
|
it: [
|
|
PERMISSIONS.ASSETS_VIEW_ALL,
|
|
PERMISSIONS.ASSETS_BORROW,
|
|
PERMISSIONS.ASSETS_TRANSFER,
|
|
PERMISSIONS.ASSETS_MAINTENANCE,
|
|
PERMISSIONS.ASSETS_MOUNT,
|
|
PERMISSIONS.ASSETS_PRINT_LABELS,
|
|
PERMISSIONS.DISPOSALS_APPLY,
|
|
PERMISSIONS.INVENTORY_MANAGE,
|
|
PERMISSIONS.NOTIFICATIONS_VIEW,
|
|
PERMISSIONS.REPORTS_VIEW
|
|
],
|
|
user: [PERMISSIONS.ASSETS_VIEW_OWN]
|
|
}
|
|
|
|
export const isUserRole = (value: unknown): value is UserRole =>
|
|
typeof value === 'string' && USER_ROLES.includes(value as UserRole)
|
|
|
|
export const getPermissionsForRole = (role: string): Permission[] => {
|
|
if (!isUserRole(role)) {
|
|
return []
|
|
}
|
|
return [...ROLE_PERMISSIONS[role]]
|
|
}
|
|
|
|
export const roleHasPermission = (role: string, permission: Permission) =>
|
|
getPermissionsForRole(role).includes(permission)
|