import { IComposerDone } from "./Composer";
import { SecurityProviderRule } from "./models/index";
export interface ILogicalOperatorSelector<T> extends IComposerDone<T> {
    and: () => ICompletableCombinableSecurityProviderComposer<T>;
    or: () => ICompletableCombinableSecurityProviderComposer<T>;
}
export interface ICombinableSecurityProviderComposer<T> {
    /**
        Add a security provider which access rules must be fullfilled.
    */
    hasAccessToProvider: (securityProviderId: string) => ILogicalOperatorSelector<T>;
}
export interface ICompletableCombinableSecurityProviderComposer<T> extends ICombinableSecurityProviderComposer<T>, IComposerDone<T> {
}
export declare class SecurityProviderCombinableRuleComposer<T> implements ICombinableSecurityProviderComposer<T>, ILogicalOperatorSelector<T> {
    private newRuleCb;
    private composerForDone;
    private rules;
    private selectedLogicalOperator?;
    constructor(newRuleCb: (allRules: Array<SecurityProviderRule>) => void, composerForDone: T);
    done: () => T;
    hasAccessToProvider: (securityProviderId: string) => this;
    and: () => this;
    or: () => this;
}
