frontend_nyla/src/api/permissionApi.ts

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;
}