feat: define housekeeping foundation contracts
This commit is contained in:
1 parent
3b3d7780c9
commit
7d62a04f0e
10 files changed
+338
No files matched your search
@@ -0,0 +1,36 @@
|
||||
export type CapabilityRequirement =
|
||||
| { mode: "all"; slugs: readonly string[] }
|
||||
| { mode: "any"; slugs: readonly string[] };
|
||||
|
||||
export interface HousekeepingActor {
|
||||
id: number;
|
||||
username: string;
|
||||
rank: number;
|
||||
}
|
||||
|
||||
export interface HousekeepingCapabilityContext {
|
||||
actor: HousekeepingActor;
|
||||
isSuperAdmin: boolean;
|
||||
has(slug: string): boolean;
|
||||
hasAny(...slugs: string[]): boolean;
|
||||
hasAll(...slugs: string[]): boolean;
|
||||
}
|
||||
|
||||
function createCapabilityRequirement(
|
||||
mode: CapabilityRequirement["mode"],
|
||||
slugs: readonly string[],
|
||||
): CapabilityRequirement {
|
||||
if (slugs.length === 0) {
|
||||
throw new Error("capability requirement is empty");
|
||||
}
|
||||
|
||||
return { mode, slugs };
|
||||
}
|
||||
|
||||
export function anyCapability(...slugs: string[]): CapabilityRequirement {
|
||||
return createCapabilityRequirement("any", slugs);
|
||||
}
|
||||
|
||||
export function allCapabilities(...slugs: string[]): CapabilityRequirement {
|
||||
return createCapabilityRequirement("all", slugs);
|
||||
}
|
||||
Reference in new issue
Block a user