예제 #1
0
        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);
        }
예제 #2
0
 /// <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();
 }
예제 #3
0
        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);
            }
        }
예제 #4
0
 public virtual ResourceClaim GetResourceByResourceName(string resourceName)
 {
     return(ResourceClaims.FirstOrDefault(rc => rc.ResourceName.Equals(resourceName, StringComparison.InvariantCultureIgnoreCase)));
 }