import { CacheInterface, ControlOptions, Policy, PropValue } from '../types'; import { OK } from '../consts'; import { Permission } from './permission.class'; export interface CanOptions extends ControlOptions { callable?: (perm: Permission) => boolean | Promise; } export interface AccessControlOptions extends ControlOptions { driver?: 'memory' | CacheInterface | (() => CacheInterface | Promise>); } export declare class AccessControl { protected driver: CacheInterface; protected readonly options: ControlOptions; constructor(policies?: Policy[], options?: AccessControlOptions); protected setDriver(driver?: AccessControlOptions['driver']): Promise; clear(): Promise; exists(policy: Policy): Promise; delete(policy: Policy): Promise; update(policy: Policy): Promise; can(subjects: (Sub | (PropValue & ControlOptions))[], action: Act | (PropValue & ControlOptions), object: Obj | (PropValue & ControlOptions), options?: CanOptions): Promise>; }