Files
EpicNext-Cms/src/features/housekeeping/foundation/capability-context.ts
T

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