import type { AccessPermission } from './common';
/**
 * 访问投票器
 */
export interface AccessVoter {
    /**
     * 进行投票
     * @param term 条件
     * @param have 拥有
     */
    vote(term: Set<AccessPermission>, have: Set<AccessPermission>): boolean;
}
/**
 * 缓存投票器（抽象类）
 */
export declare abstract class CacheVoter implements AccessVoter {
    /**
     * 缓存映射
     * @private
     */
    private readonly cache;
    /**
     * 构造函数
     */
    protected constructor();
    /**
     * 缓存键
     * @param term 条件
     * @param have 拥有
     * @private
     */
    private cacheKey;
    /**
     * 执行投票
     * @param term 条件
     * @param have 拥有
     * @protected
     */
    protected abstract execVote(term: Set<AccessPermission>, have: Set<AccessPermission>): boolean;
    /**
     * 清理缓存
     */
    clearCache(): void;
    /**
     * 进行投票
     * @param term 条件
     * @param have 拥有
     */
    vote(term: Set<AccessPermission>, have: Set<AccessPermission>): boolean;
}
/**
 * 简单投票器
 */
export declare class SimpleVoter extends CacheVoter {
    /**
     * 包含全部
     * @private
     */
    private all;
    /**
     * 构造函数
     * @param all 包含全部
     */
    constructor(all?: boolean);
    /**
     * 设置包含全部
     * @param all 包含全部
     */
    setAll(all: boolean): void;
    /**
     * 执行投票
     * @param term 条件
     * @param have 拥有
     * @protected
     */
    protected execVote(term: Set<AccessPermission>, have: Set<AccessPermission>): boolean;
}
/**
 * 关系解析器
 */
export type RelationResolver = (relation: string) => string;
/**
 * 原始关系解析器
 * @param relation 层级关系
 */
export declare const OriginRelationResolver: (relation: string) => string;
/**
 * 层级投票器
 */
export declare class HierarchyVoter extends CacheVoter {
    /**
     * 层级映射
     * @private
     */
    private readonly mapping;
    /**
     * 层级关系：a>b;b>c;c>d;e>f;f>g
     * @private
     */
    private relation;
    /**
     * 包含全部
     * @private
     */
    private all;
    /**
     * 关系解析器
     * @private
     */
    private resolver;
    /**
     * 构造函数
     * @param resolver 关系解析器
     * @param relation 层级关系：a>b;b>c;c>d;e>f;f>g
     * @param all 包含全部
     */
    constructor(resolver: RelationResolver, relation: string, all?: boolean);
    /**
     * 设置包含全部
     * @param all 包含全部
     */
    setAll(all: boolean): void;
    /**
     * 重置层级关系
     * @param relation 层级关系
     */
    resetRelation(relation: string): void;
    /**
     * 重置关系解析器
     * @param resolver 关系解析器
     */
    resetResolver(resolver: RelationResolver): void;
    /**
     * 初始化层级
     * @private
     */
    private initHierarchy;
    /**
     * p1 包含 p2
     * @param p1 权限1
     * @param p2 权限2
     * @private
     */
    private includePermission;
    /**
     * 执行投票
     * @param term 条件
     * @param have 拥有
     * @protected
     */
    protected execVote(term: Set<AccessPermission>, have: Set<AccessPermission>): boolean;
    /**
     * 获取层级关系
     */
    getRelation(): string;
}
