feat: add housekeeping capability context
This commit is contained in:
1 parent
7d62a04f0e
commit
c63c9830b2
4 files changed
+180
No files matched your search
@@ -0,0 +1,30 @@
|
||||
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);
|
||||
}
|
||||
Reference in new issue
Block a user