Ejemplo n.º 1
0
        private IInstanceSecurityRepositoryCache MockInstanceSecurityRepositoryCallsAndInitializeCache(ISecurityContextFactory securityContextFactory)
        {
            InstanceSecurityRepositoryCacheObject values = new InstanceSecurityRepositoryCacheObject
                                                           (
                new Application {
                ApplicationId = 20, ApplicationName = "Ed-Fi ODS API"
            },
                null,
                null,
                null,
                null,
                null,
                null
                                                           );

            var memoryCacheOption = A.Fake <IOptions <MemoryCacheOptions> >();

            MemoryCache memoryCache = new MemoryCache(memoryCacheOption);

            CacheProvider = new MemoryCacheProvider(memoryCache);

            CacheProvider.SetCachedObject(TestInstanceId, values);
            CacheProvider.SetCachedObject(GetLastSynchedKey(TestInstanceId), SystemClock.Now());
            CacheProvider.SetCachedObject(GetCurrentCacheInitializedKey(TestInstanceId), true);

            InstanceSecurityRepositoryCache = new InstanceSecurityRepositoryCache(securityContextFactory, CacheProvider);

            return(InstanceSecurityRepositoryCache);
        }
Ejemplo n.º 2
0
        private bool TryGetCachedRepo(string lookupKey, out InstanceSecurityRepositoryCacheObject securityRepositoryCacheObject)
        {
            _cacheLock.EnterReadLock();

            try
            {
                return(CacheProviderExtensions.TryGetCachedObject(_cacheProvider, lookupKey, out securityRepositoryCacheObject));
            }
            finally
            {
                _cacheLock.ExitReadLock();
            }
        }
        private void LoadSecurityConfigurationFromDatabaseAndAddToCache(string instanceId)
        {
            using (var context = _securityContextFactory.CreateContext())
            {
                var application = context.Applications.First(
                    app => app.ApplicationName.Equals(EdFiOdsApi, StringComparison.InvariantCultureIgnoreCase));

                var actions = context.Actions.ToList();

                var claimSets = context.ClaimSets
                                .Include(cs => cs.Application)
                                .ToList();

                var resourceClaims = context.ResourceClaims
                                     .Include(rc => rc.Application)
                                     .Include(rc => rc.ParentResourceClaim)
                                     .Where(rc => rc.Application.ApplicationId.Equals(application.ApplicationId))
                                     .ToList();

                var authorizationStrategies = context.AuthorizationStrategies
                                              .Include(auth => auth.Application)
                                              .Where(auth => auth.Application.ApplicationId.Equals(application.ApplicationId))
                                              .ToList();

                var claimSetResourceClaims = context.ClaimSetResourceClaimActions
                                             .Include(csrc => csrc.Action)
                                             .Include(csrc => csrc.ClaimSet)
                                             .Include(csrc => csrc.ResourceClaim)
                                             .Include(csrc => csrc.AuthorizationStrategyOverrides)
                                             .Where(csrc => csrc.ResourceClaim.Application.ApplicationId.Equals(application.ApplicationId))
                                             .ToList();

                var resourceClaimAuthorizationMetadata = context.ResourceClaimActions
                                                         .Include(rca => rca.Action)
                                                         .Include(rca => rca.AuthorizationStrategies)
                                                         .Include(rca => rca.ResourceClaim)
                                                         .Where(rca => rca.ResourceClaim.Application.ApplicationId.Equals(application.ApplicationId))
                                                         .ToList();

                var repo = new InstanceSecurityRepositoryCacheObject(
                    application,
                    actions,
                    claimSets,
                    resourceClaims,
                    authorizationStrategies,
                    claimSetResourceClaims,
                    resourceClaimAuthorizationMetadata);

                _cacheProvider.SetCachedObject(instanceId, repo);
            }
        }