public IEnumerable <PolicyResult> EnforcePolicies(ISecurityContext context) { if (_policies.Count.Equals(0)) { throw ExceptionFactory.CreateConfigurationErrorsException("You must add at least 1 policy for controller {0} action {1}.".FormatWith(ControllerName, ActionName)); } var defaultResultsCacheLifecycle = SecurityConfigurationProvider.Invoke().Advanced.DefaultResultsCacheLifecycle; var cache = SecurityCache.CacheProvider.Invoke(); var results = new List <PolicyResult>(); foreach (var policy in _policies.Select(NonLazyIfPolicyHasCacheKeyProvider())) { var strategy = GetExecutionCacheStrategyForPolicy(policy, defaultResultsCacheLifecycle); var cacheKey = PolicyResultCacheKeyBuilder.CreateFromStrategy(strategy, policy, context); var result = cache.Get <PolicyResult>(cacheKey, strategy.CacheLifecycle.ToLifecycle()); if (result == null) { result = policy.Enforce(context); cache.Store(result, cacheKey, strategy.CacheLifecycle.ToLifecycle()); } results.Add(result); if (result.ViolationOccured) { break; } } return(results.AsReadOnly()); }
public void ThenItShouldCacheResultWithKeyX(string controller, string action, string policy) { var policyType = ScenarioContext.Current.Get <Type>(); var strategy = GetPolicyContainer().CacheStrategies.SingleOrDefault(x => x.PolicyType == policyType); var cacheKey = PolicyResultCacheKeyBuilder.CreateFromStrategy(strategy, WriterPolicy, SecurityContext.Current); VerifyCacheKey(cacheKey, controller, action, policy); }
public void Should_be_PolicyResult_BlogController_star_TestPolicy() { // Arrange var policy = new BlogAdminPolicy(); var strategy = new PolicyResultCacheStrategy("BlogController", "Login", policy.GetType(), Cache.DoNotCache, By.Controller); var context = TestDataFactory.CreateSecurityContext(true); // Act var cacheKey = PolicyResultCacheKeyBuilder.CreateFromStrategy(strategy, policy, context); // Assert Assert.That(cacheKey, Is.EqualTo("PolicyResult_BlogController_*_" + NameHelper.Policy <BlogAdminPolicy>())); }
public void Should_be_PolicyResult_BlogController_Post_BlogEditorPolicy_when_custom_cache_key_is_null() { // Arrange var policy = new BlogEditorPolicy(null); var strategy = new PolicyResultCacheStrategy("BlogController", "Post", policy.GetType(), Cache.DoNotCache); var context = TestDataFactory.CreateSecurityContext(true); // Act var cacheKey = PolicyResultCacheKeyBuilder.CreateFromStrategy(strategy, policy, context); // Assert Assert.That(cacheKey, Is.EqualTo("PolicyResult_BlogController_Post_" + NameHelper.Policy <BlogEditorPolicy>())); }