UNPKG

@lanaqi/rsr

Version:
157 lines (156 loc) 3.36 kB
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; }