All files SimplePolicyDecisionCombinerEngine.js

100% Statements 12/12
100% Branches 6/6
100% Functions 7/7
100% Lines 12/12
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40    11x           11x 48x   48x     11x 48x   48x   11x                   2x 3x   2x     1x        
 
function combineDecisionsDenyOverrides (decisions) {
    const AuthzDecisionsPriorities = {
        "Deny": 3,
        "Indeterminate": 2,
        "Permit": 1,
        "NotApplicable": 0
    };
    const finalAuthorizationDecision = decisions
        .map((decision) => decision.authorization)
        .reduce((sofar, thisDecision) => (
            (AuthzDecisionsPriorities[sofar] >= AuthzDecisionsPriorities[thisDecision]) ? sofar : thisDecision
        ), "NotApplicable");
 
    const finalObligations = decisions
        .map((decision) => decision.obligations)
        .reduce((sofar, thisObligation) => (
            { ...sofar , ...thisObligation}
        ), {});
    return {
        authorization: finalAuthorizationDecision,
        obligations: (finalAuthorizationDecision === "Indeterminate" || finalAuthorizationDecision === "Permit")
            ? finalObligations
            : {}
    };
}
 
// deny-override
function evaluate(request, policies, engines) {
    const decisions = policies.map((policy) => (
        engines[policy.type].evaluate(request, policy)
    ));
    return combineDecisionsDenyOverrides(decisions);
}
 
module.exports = {
    evaluate,
    combineDecisionsDenyOverrides
};