// create a empty result internal AuthorizationResult() { expression = null; result = PolicyResult.NotHandled; succeededPolicies = new SortedSet <string>(); failedPolicies = new SortedSet <string>(); notHandledPolicies = new SortedSet <string>(); policyResults = new Dictionary <string, PolicyResult>(); }
internal AuthorizationResult(IPolicyExpressionRootCombine expression) { this.expression = expression; this.result = expression.Result; succeededPolicies = new SortedSet <string>(); failedPolicies = new SortedSet <string>(); notHandledPolicies = new SortedSet <string>(); policyResults = new Dictionary <string, PolicyResult>(); PolicyResult result; foreach (IPolicyOnlyExpression exp in expression) { if (policyResults.TryGetValue(exp.Policy, out result)) { switch (result) { case PolicyResult.Success: case PolicyResult.Failed: // keep break; case PolicyResult.NotHandled: default: // overwrite if (exp.Result != PolicyResult.NotHandled) { policyResults[exp.Policy] = exp.Result; } break; } } else { policyResults.Add(exp.Policy, exp.Result); } } foreach (var pair in policyResults) { switch (pair.Value) { case PolicyResult.Success: succeededPolicies.Add(pair.Key); break; case PolicyResult.Failed: failedPolicies.Add(pair.Key); break; case PolicyResult.NotHandled: default: notHandledPolicies.Add(pair.Key); break; } } }
internal void CombineAsAnd(IAuthorizationResult result) { if (!result.IsAuthorizationRequired) { return; } if (!IsAuthorizationRequired) { expression = (IPolicyExpressionRootCombine)result.Expression; this.result = expression.Result; foreach (string key in result.SucceededPolicies) { policyResults.Add(key, PolicyResult.Success); succeededPolicies.Add(key); } foreach (string key in result.FailedPolicies) { policyResults.Add(key, PolicyResult.Failed); failedPolicies.Add(key); } foreach (string key in result.NotHandledPolicies) { policyResults.Add(key, PolicyResult.NotHandled); notHandledPolicies.Add(key); } return; } foreach (string key in result.SucceededPolicies) { if (policyResults.TryGetValue(key, out PolicyResult policyResult)) { switch (policyResult) { case PolicyResult.Success: case PolicyResult.Failed: // keep break; case PolicyResult.NotHandled: default: // overwrite policyResults[key] = PolicyResult.Success; succeededPolicies.Add(key); notHandledPolicies.Remove(key); break; } } else { policyResults.Add(key, PolicyResult.Success); succeededPolicies.Add(key); } } foreach (string key in result.FailedPolicies) { if (policyResults.TryGetValue(key, out PolicyResult policyResult)) { switch (policyResult) { case PolicyResult.Success: case PolicyResult.Failed: // keep break; case PolicyResult.NotHandled: default: // overwrite policyResults[key] = PolicyResult.Failed; failedPolicies.Add(key); notHandledPolicies.Remove(key); break; } } else { policyResults.Add(key, PolicyResult.Failed); failedPolicies.Add(key); } } foreach (string key in result.NotHandledPolicies) { if (!policyResults.ContainsKey(key)) { policyResults.Add(key, PolicyResult.NotHandled); notHandledPolicies.Add(key); } } expression.Combine(result.Expression, PolicyOperator.And); this.result = expression.Result; }