@clickup/ent-framework
Version:
A PostgreSQL graph-database-alike library with microsharding and row-level security
39 lines • 1.49 kB
TypeScript
import type { EntAccessError } from "../errors/EntAccessError";
import type { Predicate } from "../predicates/Predicate";
import type { VC } from "../VC";
/**
* Each Rule evaluates to some Decision (or throws).
*/
export type RuleDecision = "ALLOW" | "TOLERATE" | "SKIP" | "DENY";
/**
* A full debug info about some Rule decision (which Rule produced this
* decision, what was thrown etc.).
*/
export interface RuleResult {
decision: RuleDecision;
rule: Rule<object>;
cause: EntAccessError | null;
}
/**
* A base class which can e.g. accept not only a predicate, but also a plain JS
* lambda function as a predicate. Also has a logic of "glueing" the rule name
* with the predicate name.
*
* Each Rule must either:
* - throw (or return DENY) if it disallows access immediately,
* - return ALLOW if the access is granted (so no other rules will run),
* - return TOLERATE if it's okay with the row, but wants others' votes too,
* - or return SKIP to fully delegate the decision to the next rule.
*
* See more comments in rules.ts.
*
* Each rule carries a predicate which it calls and then decides, how to
* interpret the result.
*/
export declare abstract class Rule<TInput> {
readonly predicate: Predicate<TInput>;
readonly name: string;
abstract evaluate(vc: VC, input: TInput): Promise<RuleResult>;
constructor(predicate: Predicate<TInput> | ((vc: VC, input: TInput) => Promise<boolean> | boolean));
}
//# sourceMappingURL=Rule.d.ts.map