UNPKG

@lanaqi/rsr

Version:
174 lines (173 loc) 4.32 kB
import type { AccessAddons } from './addon'; import { AccessBehave, AccessDecision, type AccessPath } from './common'; import type { AccessContext } from './context'; import type { AccessManager } from './manager'; /** * 访问守护器 */ export interface AccessGuarder { /** * 守护决策 * @param blockPath 阻断路径 */ guardDecision(blockPath: AccessPath): AccessDecision; /** * 守护处理 * @param currentDecision 当前决策 * @param beforeDecision 之前决策 */ guardHandle(currentDecision: AccessDecision, beforeDecision?: AccessDecision): AccessBehave; /** * 守护阻断 * @param currentPath 当前路径 * @return 是否阻断 */ guardBlock(currentPath: AccessPath): boolean; /** * 守护之前 * @param currentPath 当前路径 */ guardBefore(currentPath: AccessPath): void; /** * 守护之后 * @param currentPath 当前路径 * @param currentDecision 当前决策 */ guardAfter(currentPath: AccessPath, currentDecision: AccessDecision): void; /** * 许可之前 * @param stayPath 停留路径 * @param blockPath 阻断路径 */ permitBefore(stayPath: AccessPath, blockPath: AccessPath): void; /** * 许可之前 * @param stayPath 停留路径 * @param blockPath 阻断路径 */ permitAfter(stayPath: AccessPath, blockPath: AccessPath): void; } /** * 简单守护器 */ export declare class SimpleGuarder implements AccessGuarder { /** * 上下文 * @private */ private readonly context; /** * 管理器 * @private */ private readonly manager; /** * 插件集合 * @private */ private readonly addons; /** * 构造函数 * @param context 上下文 * @param manager 管理器 */ constructor(context: AccessContext, manager: AccessManager, addons: AccessAddons); /** * 守护决策 * @param blockPath 阻断路径 */ guardDecision(blockPath: AccessPath): AccessDecision; /** * 守护处理 * @param currentDecision 当前决策 * @param beforeDecision 之前决策 */ guardHandle(currentDecision: AccessDecision, beforeDecision?: AccessDecision): AccessBehave; /** * 守护阻断 * @param currentPath 当前路径 * @return 是否阻断 */ guardBlock(currentPath: AccessPath): boolean; /** * 守护之前 * @param currentPath 当前路径 */ guardBefore(currentPath: AccessPath): void; /** * 守护之后 * @param currentPath 当前路径 * @param currentDecision 当前决策 */ guardAfter(currentPath: AccessPath, currentDecision: AccessDecision): void; /** * 许可之前 * @param stayPath 停留路径 * @param blockPath 阻断路径 */ permitBefore(stayPath: AccessPath, blockPath: AccessPath): void; /** * 许可之后 * @param stayPath 停留路径 * @param blockPath 阻断路径 */ permitAfter(stayPath: AccessPath, blockPath: AccessPath): void; /** * 遍历插件集合 * @param fn 执行插件函数 */ private forAddons; /** * 取得资源 * @param path 路径 * @private */ private obtainResource; /** * 取得认证 * @private */ private obtainAuthentication; /** * 检查认证 * @param authentication 认证 * @private */ private checkAuthentication; /** * 取得授权 * @param authentication 认证 | undefined * @private */ private obtainAuthorization; /** * 检查授权 * @param resource 资源 * @param authorization 授权 * @private */ private checkPermission; /** * 检查签名 * @param path 路径 * @param authentication 认证 * @param authorization 授权 * @private */ private checkSignature; /** * 清理签名 * @param stayPath 停留路径 * @param stayResource 停留资源 * @private */ private clearSignature; } /** * 访问提供者 */ export type AccessProvider = { context: AccessContext; manager: AccessManager; guarder: AccessGuarder; };