15 lines
559 B
TypeScript
15 lines
559 B
TypeScript
import { createContext, useContext, type ReactNode } from "react";
|
|
import type { ManagementAction, ManagementRole } from "./rbac";
|
|
import { can } from "./rbac";
|
|
|
|
const RolesContext = createContext<readonly ManagementRole[]>([]);
|
|
|
|
export function RbacProvider({ roles, children }: { roles: readonly ManagementRole[]; children: ReactNode }) {
|
|
return <RolesContext.Provider value={roles}>{children}</RolesContext.Provider>;
|
|
}
|
|
|
|
export function useCan(action: ManagementAction): boolean {
|
|
const roles = useContext(RolesContext);
|
|
return can(roles, action);
|
|
}
|