@rbac/rbac
Version:
Blazing Fast, Zero dependency, Hierarchical Role-Based Access Control for Node.js
36 lines (35 loc) • 1.39 kB
TypeScript
export interface RBACConfig {
logger?: (role: string, operation: string | RegExp, result: boolean, colorsEnabled?: boolean) => void;
enableLogger?: boolean;
colors?: boolean;
}
export type WhenCallback<P = unknown> = (params: P, done: (err: unknown, result?: boolean) => void) => void;
export type WhenFunction<P = unknown> = (params: P) => boolean | Promise<boolean>;
export type When<P = unknown> = boolean | Promise<boolean> | WhenCallback<P> | WhenFunction<P>;
export type NormalizedWhenFn<P = unknown> = (params: P) => Promise<boolean>;
export interface PatternPermission<P = unknown> {
name: string;
regex: RegExp;
when: NormalizedWhenFn<P> | true;
}
export interface Role<P = unknown> {
can: Array<string | {
name: string;
when: When<P>;
}>;
inherits?: string[];
}
export type Roles<P = unknown> = Record<string, Role<P>>;
export interface MappedRole<P = unknown> {
direct: Set<string>;
conditional: Map<string, NormalizedWhenFn<P>>;
patterns: PatternPermission<P>[];
inherits?: string[];
allOps: string[];
}
export type MappedRoles<P = unknown> = Record<string, MappedRole<P>>;
export interface RBACInstance<P = unknown> {
can: (role: string, operation: string | RegExp, params?: P) => Promise<boolean>;
updateRoles: (roles: Roles<P>) => void;
addRole: (roleName: string, role: Role<P>) => void;
}