import { Request, Response, NextFunction } from 'express';
export declare const ANY = "*";
export declare const ANON_USER: {
    role: string;
};
type Rule = {
    resource: RegExp;
    actions: string[];
    roles: string[];
    scope?: string;
};
export type MiddlewareOpts = {
    anon?: string;
};
export interface AuthenticatedRequest extends Request {
    user?: {
        role: string;
    } | null;
    scope?: string;
}
export declare class Acl {
    private _rules;
    private findRule;
    get rules(): Rule[];
    /**
     * Add a new rule, starting with the resource + action to match
     * @param resource
     * @returns {{onlyAllow: onlyAllow}}
     */
    match(resource: RegExp): {
        for: (actions: string[]) => {
            allow: (roles: string[]) => {
                as: (scope: string) => Rule;
            };
        };
    };
    /**
     * Loops through the acls in order added looking for a resource pattern match.
     * Grants permission if the role is found
     * @param role
     * @param resource
     * @param action
     * @returns {boolean}
     */
    isAllowed(role: string, resource: string, action: string): boolean;
    /**
     * Express middleware
     * @param {*} opts
     */
    middleware(opts: MiddlewareOpts): (req: AuthenticatedRequest, res: Response, next: NextFunction) => void;
    /**
     * Clear all rules
     */
    reset(): void;
}
declare const acl: Acl;
export default acl;
