@lanaqi/rsr
Version:
157 lines (156 loc) • 3.36 kB
TypeScript
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;
}