@lanaqi/rsr
Version:
174 lines (173 loc) • 4.32 kB
TypeScript
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;
};