private IEnumerable <ResourceClaim> GetResourceClaimLineageForResourceClaim(string resourceClaimUri) { var resourceClaimLineage = new List <ResourceClaim>(); ResourceClaim resourceClaim; try { resourceClaim = ResourceClaims .SingleOrDefault(rc => rc.ClaimName.Equals(resourceClaimUri, StringComparison.InvariantCultureIgnoreCase)); } catch (InvalidOperationException ex) { // Use InvalidOperationException wrapper with custom message over InvalidOperationException // thrown by Linq to communicate back to caller the problem with the configuration. throw new InvalidOperationException($"Multiple resource claims with a claim name of '{resourceClaimUri}' were found in the Ed-Fi API's security configuration. Authorization cannot be performed.", ex); } if (resourceClaim != null) { resourceClaimLineage.Add(resourceClaim); if (resourceClaim.ParentResourceClaim != null) { resourceClaimLineage.AddRange(GetResourceClaimLineageForResourceClaim(resourceClaim.ParentResourceClaim.ClaimName)); } } return(resourceClaimLineage); }
/// <summary> /// Clears the cache, the database will be hit lazily. /// </summary> protected void Reset() { Application.Reset(); Actions.Reset(); ClaimSets.Reset(); ResourceClaims.Reset(); AuthorizationStrategies.Reset(); ClaimSetResourceClaimActions.Reset(); ResourceClaimActions.Reset(); }
private void AddStrategiesForResourceClaimLineage(List <ResourceClaimActionAuthorization> strategies, string resourceClaimUri, string action) { //check for exact match on resource and action var claimAndStrategy = ResourceClaimAuthorizationMetadata .SingleOrDefault( rcas => rcas.ResourceClaim.ClaimName.Equals(resourceClaimUri, StringComparison.InvariantCultureIgnoreCase) && rcas.Action.ActionUri.Equals(action, StringComparison.InvariantCultureIgnoreCase)); // Add the claim/strategy if it was found if (claimAndStrategy != null) { strategies.Add(claimAndStrategy); } var resourceClaim = ResourceClaims.FirstOrDefault(rc => rc.ClaimName.Equals(resourceClaimUri, StringComparison.InvariantCultureIgnoreCase)); // if there's a parent resource, recurse if (resourceClaim != null && resourceClaim.ParentResourceClaim != null) { AddStrategiesForResourceClaimLineage(strategies, resourceClaim.ParentResourceClaim.ClaimName, action); } }
public virtual ResourceClaim GetResourceByResourceName(string resourceName) { return(ResourceClaims.FirstOrDefault(rc => rc.ResourceName.Equals(resourceName, StringComparison.InvariantCultureIgnoreCase))); }