import type { AccessPath } from './common';
import type { AccessContext } from './context';
import type { AccessResource } from './resource';
/**
 * 阻断处理器
 * @param context 上下文
 * @param currentPath 当前路径
 * @param currentResource 当前资源
 */
export type BlockHandler = (context: AccessContext, currentPath: AccessPath, currentResource: AccessResource | null) => boolean;
/**
 * 访问阻断器
 */
export interface AccessBlocker {
    /**
     * 进行阻断
     * @param context 上下文
     * @param currentPath 当前路径
     * @param currentResource 当前资源
     */
    block(context: AccessContext, currentPath: AccessPath, currentResource: AccessResource | null): boolean;
    /**
     * 注册处理器
     * @param handler 处理器
     */
    register(handler: BlockHandler): void;
    /**
     * 注销处理器
     * @param handler 处理器
     */
    unregister(handler: BlockHandler): void;
}
/**
 * 单一阻断器
 */
export declare class SingleBlocker implements AccessBlocker {
    /**
     * 处理器
     * @private
     */
    private handler?;
    /**
     * 进行阻断
     * @param context 上下文
     * @param currentPath 当前路径
     * @param currentResource 当前资源
     */
    block(context: AccessContext, currentPath: AccessPath, currentResource: AccessResource): boolean;
    /**
     * 注册处理器
     * @param handler 处理器
     */
    register(handler: BlockHandler): void;
    /**
     * 注销处理器
     * @param handler 处理器
     */
    unregister(handler: BlockHandler): void;
}
/**
 * 多个阻断器
 */
export declare class MultiBlocker implements AccessBlocker {
    /**
     * 处理器集合
     * @private
     */
    private readonly handlers;
    /**
     * 构造函数
     */
    constructor();
    /**
     * 进行阻断
     * @param context 上下文
     * @param currentPath 当前路径
     * @param currentResource 当前资源
     */
    block(context: AccessContext, currentPath: AccessPath, currentResource: AccessResource): boolean;
    /**
     * 注册处理器
     * @param handler 处理器
     */
    register(handler: BlockHandler): void;
    /**
     * 注销处理器
     * @param handler 处理器
     */
    unregister(handler: BlockHandler): void;
    /**
     * 清理处理器集合
     */
    clear(): void;
}
