public void Serialization()
        {
            var securityProviderMock = MockRepository.GenerateStrictMock <ISecurityProvider>();

            securityProviderMock
            .Expect(_ => _.GetAccess(_context, new SecurityPrincipal("foo", null, null, null)))
            .Return(new[] { AccessType.Get(GeneralAccessTypes.Read) })
            .Repeat.Once();

            bool hasAccess = _strategy.HasAccess(
                securityProviderMock,
                new SecurityPrincipal("foo", null, null, null),
                new[] { AccessType.Get(GeneralAccessTypes.Read) });

            Assert.That(hasAccess, Is.True);

            var deserializedStrategy = Serializer.SerializeAndDeserialize(_strategy);

            Assert.That(deserializedStrategy, Is.Not.SameAs(_strategy));

            bool hasAccessAfterDeserialization = _strategy.HasAccess(
                MockRepository.GenerateStrictMock <ISecurityProvider>(),
                new SecurityPrincipal("foo", null, null, null),
                new[] { AccessType.Get(GeneralAccessTypes.Read) });

            Assert.That(hasAccessAfterDeserialization, Is.True);
        }
Exemple #2
0
        public bool HasAccess(
            ISecurityProvider securityProvider,
            ISecurityPrincipal principal,
            IReadOnlyList <AccessType> requiredAccessTypes)
        {
            ArgumentUtility.DebugCheckNotNull("securityProvider", securityProvider);
            ArgumentUtility.DebugCheckNotNull("principal", principal);
            ArgumentUtility.DebugCheckNotNullOrEmpty("requiredAccessTypes", requiredAccessTypes);

            if (_isEvaluatingAccess)
            {
                throw new InvalidOperationException(
                          "Multiple reentrancies on InstanceBasedReEntrancyGuardedObjectSecurityStrategyDecorator.HasAccess(...) are not allowed as they can indicate a possible infinite recursion. "
                          + "Use SecurityFreeSection.IsActive to guard the computation of the SecurityContext returned by ISecurityContextFactory.CreateSecurityContext().");
            }

            try
            {
                _isEvaluatingAccess = true;
                return(_objectSecurityStrategy.HasAccess(securityProvider, principal, requiredAccessTypes));
            }
            finally
            {
                _isEvaluatingAccess = false;
            }
        }
        public void ExpectObjectSecurityStrategyHasAccessWithMatchingScope(SecurableObject securableObject, ClientTransactionScope expectedScope)
        {
            IObjectSecurityStrategy objectSecurityStrategy = securableObject.GetSecurityStrategy();

            Expect.Call(objectSecurityStrategy.HasAccess(null, null, null))
            .IgnoreArguments()
            .WhenCalled(mi => CheckScope(expectedScope))
            .Return(true);
        }
Exemple #4
0
        public void HasAccess_WithAccessGranted()
        {
            var strategy = new DomainObjectSecurityStrategyDecorator(_mockObjectSecurityStrategy, _stubContextFactory, RequiredSecurityForStates.None);

            using (_mocks.Ordered())
            {
                Expect.Call(_stubContextFactory.IsInvalid).Return(false);
                Expect.Call(_stubContextFactory.IsNew).Return(false);
                Expect.Call(_stubContextFactory.IsDeleted).Return(false);
                Expect.Call(_mockObjectSecurityStrategy.HasAccess(_stubSecurityProvider, _stubUser, _accessTypeResult)).Return(true);
            }
            _mocks.ReplayAll();

            bool hasAccess = strategy.HasAccess(_stubSecurityProvider, _stubUser, _accessTypeResult);

            _mocks.VerifyAll();
            Assert.That(hasAccess, Is.EqualTo(true));
        }
 public void ExpectObjectSecurityStrategyHasAccess(Enum[] requiredAccessTypes, bool returnValue)
 {
     Expect
     .Call(
         _mockObjectSecurityStrategy.HasAccess(
             Arg.Is(_mockSecurityProvider),
             Arg.Is(_userStub),
             Arg <IReadOnlyList <AccessType> > .List.Equal(ConvertAccessTypeEnums(requiredAccessTypes))))
     .Return(returnValue);
 }
 private void ExpectObjectSecurityStrategyHasAccessForSecurableObject(Enum accessTypeEnum, bool returnValue)
 {
     Expect
     .Call(
         _mockObjectSecurityStrategy.HasAccess(
             Arg.Is(_mockSecurityProvider),
             Arg.Is(_stubUser),
             Arg <IReadOnlyList <AccessType> > .List.Equal(new[] { AccessType.Get(accessTypeEnum) })))
     .Return(returnValue);
 }
Exemple #7
0
        // methods and properties

        public void ExpectHasAccess(Enum[] accessTypeEnums, bool returnValue)
        {
            AccessType[] accessTypes = Array.ConvertAll <Enum, AccessType> (accessTypeEnums, AccessType.Get);
            Expect.Call(
                _mockObjectSecurityStrategy.HasAccess(
                    Arg.Is(_mockSecurityProvider),
                    Arg.Is(_stubUser),
                    Arg <IReadOnlyList <AccessType> > .List.Equal(accessTypes)))
            .Return(returnValue);
        }
        public void ExpectObjectSecurityStrategyHasAccess(SecurableObject securableObject, Enum accessTypeEnum, HasAccessDelegate doDelegate)
        {
            IObjectSecurityStrategy objectSecurityStrategy = securableObject.GetSecurityStrategy();

            Expect.Call(
                objectSecurityStrategy.HasAccess(
                    Arg.Is(_mockSecurityProvider),
                    Arg.Is(_stubUser),
                    Arg <IReadOnlyList <AccessType> > .List.Equal(new[] { AccessType.Get(accessTypeEnum) })))
            .WhenCalled(mi => CheckTransaction())
            .Do(doDelegate);
        }
        public void HasAccess_WithAccessGranted_OnlyRequestsAccessTypesOnce_ReturnsTrue()
        {
            _securityProviderMock
            .Expect(_ => _.GetAccess(_context, _principalStub))
            .Return(new[] { AccessType.Get(GeneralAccessTypes.Read) })
            .Repeat.Once();

            bool hasAccessOnFirstCall = _strategy.HasAccess(
                _securityProviderMock,
                _principalStub,
                new[] { AccessType.Get(GeneralAccessTypes.Read) });

            Assert.That(hasAccessOnFirstCall, Is.True);

            bool hasAccessOnSecondCall = _strategy.HasAccess(
                _securityProviderMock,
                _principalStub,
                new[] { AccessType.Get(GeneralAccessTypes.Read) });

            Assert.That(hasAccessOnSecondCall, Is.True);

            _securityProviderMock.VerifyAllExpectations();
        }
Exemple #10
0
        public bool HasAccess(ISecurityProvider securityService, ISecurityPrincipal principal, IReadOnlyList <AccessType> requiredAccessTypes)
        {
            if (_securityContextFactory.IsInvalid)
            {
                return(true);
            }

            bool isSecurityRequiredForNew = RequiredSecurityForStates.New == (RequiredSecurityForStates.New & _requiredSecurityForStates);

            if (!isSecurityRequiredForNew && _securityContextFactory.IsNew)
            {
                return(true);
            }

            bool isSecurityRequiredForDeleted = RequiredSecurityForStates.Deleted == (RequiredSecurityForStates.Deleted & _requiredSecurityForStates);

            if (!isSecurityRequiredForDeleted && _securityContextFactory.IsDeleted)
            {
                return(true);
            }

            return(_innerStrategy.HasAccess(securityService, principal, requiredAccessTypes));
        }