31 lines
818 B
TypeScript
31 lines
818 B
TypeScript
import type { PermissionSet } from "@/lib/permissions";
|
|
import type {
|
|
CapabilityRequirement,
|
|
HousekeepingActor,
|
|
HousekeepingCapabilityContext,
|
|
} from "./contracts";
|
|
|
|
export function createHousekeepingCapabilityContext(
|
|
actor: HousekeepingActor,
|
|
permissions: PermissionSet,
|
|
): HousekeepingCapabilityContext {
|
|
return {
|
|
actor,
|
|
isSuperAdmin: permissions.isSuperAdmin,
|
|
has: (slug) => permissions.has(slug),
|
|
hasAny: (...slugs) => permissions.hasAny(...slugs),
|
|
hasAll: (...slugs) => permissions.hasAll(...slugs),
|
|
};
|
|
}
|
|
|
|
export function satisfiesCapability(
|
|
context: HousekeepingCapabilityContext,
|
|
requirement: CapabilityRequirement,
|
|
): boolean {
|
|
if (context.isSuperAdmin) return true;
|
|
|
|
return requirement.mode === "any"
|
|
? context.hasAny(...requirement.slugs)
|
|
: context.hasAll(...requirement.slugs);
|
|
}
|