import { RoleManager } from './roleManager';
export type MatchingFunc = (arg1: string, arg2: string) => boolean;
export declare class DefaultRoleManager implements RoleManager {
    private allDomains;
    private maxHierarchyLevel;
    private hasPattern;
    private hasDomainPattern;
    private hasDomainHierarchy;
    private domainHierarchyManager;
    private matchingFunc;
    private domainMatchingFunc;
    /**
     * DefaultRoleManager is the constructor for creating an instance of the
     * default RoleManager implementation.
     *
     * @param maxHierarchyLevel the maximized allowed RBAC hierarchy level.
     */
    constructor(maxHierarchyLevel: number);
    /**
     * addMatchingFunc support use pattern in g
     * @param name name
     * @param fn matching function
     * @deprecated
     */
    addMatchingFunc(name: string, fn: MatchingFunc): Promise<void>;
    /**
     * addMatchingFunc support use pattern in g
     * @param fn matching function
     */
    addMatchingFunc(fn: MatchingFunc): Promise<void>;
    /**
     * addDomainMatchingFunc support use domain pattern in g
     * @param fn domain matching function
     * ```
     */
    addDomainMatchingFunc(fn: MatchingFunc): Promise<void>;
    /**
     * addDomainHierarchy sets a rolemanager to define role inheritance between domains
     * @param rm RoleManager to define domain hierarchy
     */
    addDomainHierarchy(rm: RoleManager): Promise<void>;
    private generateTempRoles;
    /**
     * addLink adds the inheritance link between role: name1 and role: name2.
     * aka role: name1 inherits role: name2.
     * domain is a prefix to the roles.
     */
    addLink(name1: string, name2: string, ...domain: string[]): Promise<void>;
    /**
     * clear clears all stored data and resets the role manager to the initial state.
     */
    clear(): Promise<void>;
    /**
     * deleteLink deletes the inheritance link between role: name1 and role: name2.
     * aka role: name1 does not inherit role: name2 any more.
     * domain is a prefix to the roles.
     */
    deleteLink(name1: string, name2: string, ...domain: string[]): Promise<void>;
    /**
     * hasLink determines whether role: name1 inherits role: name2.
     * domain is a prefix to the roles.
     */
    syncedHasLink(name1: string, name2: string, ...domain: string[]): boolean;
    hasLink(name1: string, name2: string, ...domain: string[]): Promise<boolean>;
    /**
     * getRoles gets the roles that a subject inherits.
     * domain is a prefix to the roles.
     */
    getRoles(name: string, ...domain: string[]): Promise<string[]>;
    /**
     * getUsers gets the users that inherits a subject.
     * domain is an unreferenced parameter here, may be used in other implementations.
     */
    getUsers(name: string, ...domain: string[]): Promise<string[]>;
    /**
     * printRoles prints all the roles to log.
     */
    printRoles(): Promise<void>;
    /**
     * getDomains gets domains that a user has.
     */
    getDomains(name: string): Promise<string[]>;
    /**
     * getAllDomains gets all domains.
     */
    getAllDomains(): Promise<string[]>;
    private hasUserForRole;
}
