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;
};
