Example #1
0
        public void ApplyProfile <TSecurityProfile>() where TSecurityProfile : SecurityProfile, new()
        {
            var profile = new TSecurityProfile();

            Publish.ConfigurationEvent(() => "Applying profile {0}.".FormatWith(profile.GetType().FullName));
            Runtime.ApplyConfiguration(profile);
        }
Example #2
0
        public static ISecurityConfiguration Configure(Action <ConfigurationExpression> configurationExpression)
        {
            if (configurationExpression == null)
            {
                throw new ArgumentNullException("configurationExpression");
            }

            Reset();

            if (SecurityDoctor.Current.ScanForEventListenersOnConfigure)
            {
                SecurityDoctor.Current.ScanForEventListeners();
            }

            Publish.ConfigurationEvent(() => "Configuring FluentSecurity.");

            lock (LockObject)
            {
                return(Publish.ConfigurationEvent(() =>
                {
                    var configuration = new SecurityConfiguration(configurationExpression);
                    SecurityConfiguration.SetConfiguration(configuration);
                    return SecurityConfiguration.Current;
                }, config => "Finished configuring FluentSecurity."));
            }
        }
        public IPolicyContainerConfiguration RemovePolicy <TSecurityPolicy>(Func <TSecurityPolicy, bool> predicate = null) where TSecurityPolicy : class, ISecurityPolicy
        {
            Publish.ConfigurationEvent(() => "Removing policies from {0} action {1}.".FormatWith(ControllerName, ActionName));

            IEnumerable <ISecurityPolicy> matchingPolicies;

            if (predicate == null)
            {
                matchingPolicies = _policies.Where(p => p.IsPolicyOf <TSecurityPolicy>()).ToList();
            }
            else
            {
                matchingPolicies = _policies.Where(p =>
                                                   p.IsPolicyOf <TSecurityPolicy>() &&
                                                   predicate.Invoke(p.EnsureNonLazyPolicyOf <TSecurityPolicy>())
                                                   ).ToList();
            }

            foreach (var matchingPolicy in matchingPolicies)
            {
                var policy = matchingPolicy;
                _policies.Remove(matchingPolicy);
                Publish.ConfigurationEvent(() => "- Removed policy {0} [{1}].".FormatWith(policy.GetPolicyType().FullName, policy is ILazySecurityPolicy ? "Lazy" : "Instance"));
            }

            return(this);
        }
Example #4
0
        public void Should_produce_configuration_event_with_timing_when_event_listener_is_registered()
        {
            // Arrange
            const int    expectedMilliseconds = 9;
            var          expectedResult       = new { };
            const string expectedMessage      = "Message";

            var events = new List <ISecurityEvent>();

            SecurityDoctor.Register(events.Add);

            // Act
            var result = Publish.ConfigurationEvent(() =>
            {
                Thread.Sleep(expectedMilliseconds + 5);
                return(expectedResult);
            }, r => expectedMessage);

            // Assert
            Assert.That(result, Is.EqualTo(expectedResult));

            var @event = events.Single();

            Assert.That(@event.CorrelationId, Is.EqualTo(SecurityConfigurator.CorrelationId));
            Assert.That(@event.Message, Is.EqualTo(expectedMessage));
            Assert.That(@event.CompletedInMilliseconds, Is.GreaterThanOrEqualTo(expectedMilliseconds));
        }
 private void ApplyProfile(Type profileType)
 {
     if (Activator.CreateInstance(profileType) is SecurityProfile profile)
     {
         Publish.ConfigurationEvent(() => "Applying profile {0}.".FormatWith(profile.GetType().FullName));
         Runtime.ApplyConfiguration(profile);
     }
 }
Example #6
0
        public void Scan(Action <ProfileScanner> scan)
        {
            Publish.ConfigurationEvent(() => "Scanning for profiles");
            var profileScanner = new ProfileScanner();

            scan.Invoke(profileScanner);
            var profiles = profileScanner.Scan().ToList();

            profiles.ForEach(ApplyProfile);
        }
Example #7
0
        public void Should_produce_configuration_event_when_event_listener_is_registered()
        {
            // Arrange
            const string expectedMessage = "Message";

            var events = new List <ISecurityEvent>();

            SecurityDoctor.Register(events.Add);

            // Act
            Publish.ConfigurationEvent(() => expectedMessage);

            // Assert
            var @event = events.Single();

            Assert.That(@event.CorrelationId, Is.EqualTo(SecurityConfigurator.CorrelationId));
            Assert.That(@event.Message, Is.EqualTo(expectedMessage));
        }
        public IPolicyContainerConfiguration AddPolicy(ISecurityPolicy securityPolicy)
        {
            Publish.ConfigurationEvent(() => "Updating policies for {0} action {1} using {2}.".FormatWith(ControllerName, ActionName, PolicyAppender.GetType().FullName));

            var policiesBeforeUpdate = new ISecurityPolicy[_policies.Count];

            _policies.CopyTo(policiesBeforeUpdate, 0);

            PolicyAppender.UpdatePolicies(securityPolicy, _policies);

            var policiesRemoved = policiesBeforeUpdate.Except(_policies).ToList();

            policiesRemoved.Each(p => Publish.ConfigurationEvent(() => "- Removed policy {0} [{1}].".FormatWith(p.GetPolicyType().FullName, p is ILazySecurityPolicy ? "Lazy" : "Instance")));

            var policiesAdded = _policies.Except(policiesBeforeUpdate).ToList();

            policiesAdded.Each(p => Publish.ConfigurationEvent(() => "- Added policy {0} [{1}].".FormatWith(p.GetPolicyType().FullName, p is ILazySecurityPolicy ? "Lazy" : "Instance")));

            return(this);
        }
Example #9
0
        public void Should_return_result_when_no_event_listener_is_registered()
        {
            // Arrange
            SecurityDoctor.Reset();
            var context = TestDataFactory.CreateSecurityContext(false);

            var expectedResult1 = new {};
            var expectedResult2 = new {};
            var expectedResult3 = new {};


            // Act
            var result1 = Publish.ConfigurationEvent(() => expectedResult1, r => null);
            var result2 = Publish.RuntimeEvent(() => expectedResult2, r => null, context);
            var result3 = Publish.RuntimePolicyEvent(() => expectedResult3, r => null, context);

            // Assert
            Assert.That(result1, Is.EqualTo(expectedResult1));
            Assert.That(result2, Is.EqualTo(expectedResult2));
            Assert.That(result3, Is.EqualTo(expectedResult3));
        }