2026-05-09 12:51:28 +06:00
|
|
|
const ROLE_PERMISSIONS: Record<string, string[]> = {
|
2026-05-10 01:22:17 +06:00
|
|
|
super_admin: ['kyc.request', 'kyc.view', 'kyc.doc_upload', 'kyc.doc_approve', 'kyc.doc_reject', 'kyc.make_valid_user', 'dashboard.view', 'rental.view', 'rental.create', 'rental.accept', 'rental.reject', 'rental.cancel', 'rental.edit', 'rental.image_approve', 'rental.lock', 'rental.unlock'],
|
|
|
|
|
admin_manager: ['kyc.request', 'kyc.view', 'kyc.doc_upload', 'kyc.doc_approve', 'kyc.doc_reject', 'kyc.make_valid_user', 'dashboard.view', 'rental.view', 'rental.create', 'rental.accept', 'rental.reject', 'rental.cancel', 'rental.edit', 'rental.image_approve', 'rental.lock', 'rental.unlock'],
|
|
|
|
|
staff: ['kyc.request', 'kyc.view', 'kyc.doc_upload', 'dashboard.view', 'rental.view', 'rental.create'],
|
2026-05-09 12:51:28 +06:00
|
|
|
accountant: ['dashboard.view', 'accounting.view', 'accounting.create', 'accounting.edit', 'accounting.delete'],
|
|
|
|
|
investor: ['dashboard.view', 'kyc.request', 'kyc.view'],
|
|
|
|
|
biker: ['dashboard.view', 'kyc.request', 'kyc.view', 'rentals.view', 'rentals.create'],
|
|
|
|
|
'swap-station': ['dashboard.view', 'kyc.request', 'kyc.view'],
|
|
|
|
|
merchant: ['dashboard.view', 'kyc.request', 'kyc.view', 'merchants.view'],
|
|
|
|
|
};
|
|
|
|
|
|
2026-05-10 01:22:17 +06:00
|
|
|
export const canRentalAccept = () => hasPermission('rental.accept');
|
|
|
|
|
export const canRentalReject = () => hasPermission('rental.reject');
|
|
|
|
|
export const canRentalCancel = () => hasPermission('rental.cancel');
|
|
|
|
|
export const canRentalEdit = () => hasPermission('rental.edit');
|
|
|
|
|
export const canRentalImageApprove = () => hasPermission('rental.image_approve');
|
|
|
|
|
export const canRentalLock = () => hasPermission('rental.lock');
|
|
|
|
|
export const canRentalUnlock = () => hasPermission('rental.unlock');
|
|
|
|
|
export const canRentalCreate = () => hasPermission('rental.create');
|
|
|
|
|
|
2026-05-07 16:08:18 +06:00
|
|
|
export const isAuthenticated = (): boolean => {
|
|
|
|
|
return typeof window !== 'undefined' && !!sessionStorage.getItem('authToken');
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const getUserRole = (): string | null => {
|
|
|
|
|
return typeof window !== 'undefined' ? sessionStorage.getItem('userRole') : null;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const getUserName = (): string | null => {
|
|
|
|
|
return typeof window !== 'undefined' ? sessionStorage.getItem('userName') : null;
|
|
|
|
|
};
|
|
|
|
|
|
2026-05-09 12:51:28 +06:00
|
|
|
export const getUserPermissions = (): string[] => {
|
|
|
|
|
if (typeof window === 'undefined') return [];
|
|
|
|
|
const role = getUserRole();
|
2026-05-10 01:22:17 +06:00
|
|
|
if (role) return ROLE_PERMISSIONS[role] || [];
|
|
|
|
|
return [];
|
2026-05-09 12:51:28 +06:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const hasPermission = (permission: string): boolean => {
|
|
|
|
|
const permissions = getUserPermissions();
|
|
|
|
|
return permissions.includes(permission);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const canApproveKycDocument = (): boolean => {
|
|
|
|
|
return hasPermission('kyc.doc_approve');
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const canRejectKycDocument = (): boolean => {
|
|
|
|
|
return hasPermission('kyc.doc_reject');
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const canMakeValidUser = (): boolean => {
|
|
|
|
|
return hasPermission('kyc.make_valid_user');
|
|
|
|
|
};
|
|
|
|
|
|
2026-05-07 16:08:18 +06:00
|
|
|
export const logout = () => {
|
|
|
|
|
if (typeof window !== 'undefined') {
|
|
|
|
|
sessionStorage.removeItem('authToken');
|
|
|
|
|
sessionStorage.removeItem('userRole');
|
|
|
|
|
sessionStorage.removeItem('userName');
|
2026-05-09 12:51:28 +06:00
|
|
|
sessionStorage.removeItem('userPermissions');
|
2026-05-07 16:08:18 +06:00
|
|
|
}
|
|
|
|
|
};
|