49 lines
1.3 KiB
TypeScript
49 lines
1.3 KiB
TypeScript
import { ApiRequestOptions } from '../hooks/useApi';
|
|
|
|
// ============================================================================
|
|
// TYPES & INTERFACES
|
|
// ============================================================================
|
|
|
|
export type PermissionLevel = 'n' | 'o' | 'a';
|
|
|
|
export interface UserPermissions {
|
|
view: boolean;
|
|
read: PermissionLevel;
|
|
create: PermissionLevel;
|
|
update: PermissionLevel;
|
|
delete: PermissionLevel;
|
|
}
|
|
|
|
export type PermissionContext = 'DATA' | 'UI' | 'RESOURCE';
|
|
|
|
// Type for the request function passed to API functions
|
|
export type ApiRequestFunction = (options: ApiRequestOptions<any>) => Promise<any>;
|
|
|
|
// ============================================================================
|
|
// API REQUEST FUNCTIONS
|
|
// ============================================================================
|
|
|
|
/**
|
|
* Fetch permissions for a given context and item
|
|
* Endpoint: GET /api/rbac/permissions
|
|
* Query params: context (required), item (optional)
|
|
*/
|
|
export async function fetchPermissions(
|
|
request: ApiRequestFunction,
|
|
context: PermissionContext,
|
|
item?: string
|
|
): Promise<UserPermissions> {
|
|
const params: Record<string, string> = { context };
|
|
if (item) {
|
|
params.item = item;
|
|
}
|
|
|
|
const data = await request<UserPermissions>({
|
|
url: '/api/rbac/permissions',
|
|
method: 'get',
|
|
params
|
|
});
|
|
|
|
return data;
|
|
}
|
|
|