import { EApiAuthorizationMode, EApiPolicyEffect } from '../../../../../enum/class/authorization';
import { IApiBaseEntity } from '../../../../api-base-entity.interface';
import { IApiAuthorizationDecisionTrace } from './trace.interface';
import { IApiAuthorizationPrincipal } from '../principal/interface';
import { IApiAuthorizationRule } from '../rule/interface';
import { IApiAuthorizationScope } from '../scope.interface';
import { TApiAuthorizationRuleResultTransform } from '../../../../../type/class/api/authorization/rule/result-transform.type';
export interface IApiAuthorizationDecision<E extends IApiBaseEntity, R> {
    action: string;
    appliedRules: Array<IApiAuthorizationRule<E, R>>;
    effect: EApiPolicyEffect;
    mode: EApiAuthorizationMode;
    permissions: ReadonlyArray<string>;
    policyId: string;
    policyIds: Array<string>;
    principal: IApiAuthorizationPrincipal;
    resource?: E;
    resourceType: string;
    scope?: IApiAuthorizationScope<E>;
    trace: IApiAuthorizationDecisionTrace;
    transforms: Array<TApiAuthorizationRuleResultTransform<E, R>>;
}
