コード例 #1
0
        public void Test_ManySide_RecursiveSecurity_ChecksAccessOnNestedCall()
        {
            SecurableObject securableObject = _testHelper.CreateSecurableObject();
            SecurableObject otherObject     = _testHelper.CreateSecurableObject();

            _testHelper.Transaction.ExecuteInScope(() => securableObject.OtherChildren.Add(_testHelper.CreateSecurableObject()));
            var setMethodInformation       = MethodInfoAdapter.Create(typeof(SecurableObject).GetProperty("Children").GetGetMethod());
            var securableEndPointDefintion = securableObject.ID.ClassDefinition.GetRelationEndPointDefinition(typeof(SecurableObject).FullName + ".Children");

            _testHelper.ExpectPermissionReflectorGetRequiredMethodPermissions(setMethodInformation, TestAccessTypes.First);
            _testHelper.ExpectPermissionReflectorGetRequiredMethodPermissions(setMethodInformation, TestAccessTypes.First);
            HasAccessDelegate hasAccess = delegate
            {
                _extension.RelationReading(_testHelper.Transaction, otherObject, securableEndPointDefintion, ValueAccess.Current);
                return(true);
            };

            _testHelper.ExpectObjectSecurityStrategyHasAccess(securableObject, TestAccessTypes.First, hasAccess);
            _testHelper.ExpectObjectSecurityStrategyHasAccess(otherObject, TestAccessTypes.First, true);
            _testHelper.ReplayAll();


            _extension.RelationReading(_testHelper.Transaction, securableObject, securableEndPointDefintion, ValueAccess.Current);

            _testHelper.VerifyAll();
        }
コード例 #2
0
        public void Test_RecursiveSecurity_ChecksAccessOnNestedCall()
        {
            SecurableObject   allowedObject     = _testHelper.CreateSecurableObject();
            SecurableObject   deniedObject      = _testHelper.CreateSecurableObject();
            IQuery            nestedQuery       = _testHelper.CreateSecurableObjectQuery();
            var               nestedQueryResult = new QueryResult <DomainObject> (nestedQuery, new DomainObject[] { allowedObject, deniedObject });
            HasAccessDelegate hasAccess         = delegate
            {
                var filteredResult = _extension.FilterQueryResult(_testHelper.Transaction, nestedQueryResult);
                Assert.That(filteredResult.ToArray(), Is.EqualTo(new[] { allowedObject }));
                return(true);
            };

            _testHelper.ExpectObjectSecurityStrategyHasAccess(allowedObject, GeneralAccessTypes.Find, true);
            _testHelper.ExpectObjectSecurityStrategyHasAccess(deniedObject, GeneralAccessTypes.Find, false);

            SecurableObject securableObject = _testHelper.CreateSecurableObject();
            IQuery          query           = _testHelper.CreateSecurableObjectQuery();
            var             queryResult     = new QueryResult <DomainObject> (query, new DomainObject[] { securableObject });

            _testHelper.ExpectObjectSecurityStrategyHasAccess(securableObject, GeneralAccessTypes.Find, hasAccess);

            _testHelper.ReplayAll();

            var finalResult = _extension.FilterQueryResult(_testHelper.Transaction, queryResult);

            _testHelper.VerifyAll();

            Assert.That(finalResult.ToArray(), Is.EqualTo(new[] { securableObject }));
        }
コード例 #3
0
        public void Test_RecursiveSecurity_ChecksAccessOnNestedCall()
        {
            SecurableObject securableObject = _testHelper.CreateSecurableObject();
            SecurableObject otherObject     = _testHelper.CreateSecurableObject();

            _testHelper.Transaction.Commit();
            HasAccessDelegate hasAccess = delegate
            {
                _extension.ObjectDeleting(_testHelper.Transaction, otherObject);
                return(true);
            };

            _testHelper.ExpectObjectSecurityStrategyHasAccess(securableObject, GeneralAccessTypes.Delete, hasAccess);
            _testHelper.ExpectObjectSecurityStrategyHasAccess(otherObject, GeneralAccessTypes.Delete, true);
            _testHelper.ReplayAll();

            _extension.ObjectDeleting(_testHelper.Transaction, securableObject);

            _testHelper.VerifyAll();
        }
コード例 #4
0
        public void Test_RecursiveSecurity_ChecksAccessOnNestedCall()
        {
            SecurableObject securableObject = _testHelper.CreateSecurableObject();
            SecurableObject otherObject     = _testHelper.CreateSecurableObject();

            _testHelper.ExpectPermissionReflectorGetRequiredMethodPermissions(_getMethodInformation, TestAccessTypes.First);
            _testHelper.ExpectPermissionReflectorGetRequiredMethodPermissions(_getMethodInformation, TestAccessTypes.First);
            HasAccessDelegate hasAccess = delegate
            {
                _extension.PropertyValueReading(_testHelper.Transaction, otherObject, _stringPropertyDefinition, ValueAccess.Current);
                return(true);
            };

            _testHelper.ExpectObjectSecurityStrategyHasAccess(securableObject, TestAccessTypes.First, hasAccess);
            _testHelper.ExpectObjectSecurityStrategyHasAccess(otherObject, TestAccessTypes.First, true);
            _testHelper.ReplayAll();

            _extension.PropertyValueReading(_testHelper.Transaction, securableObject, _stringPropertyDefinition, ValueAccess.Current);

            _testHelper.VerifyAll();
        }
コード例 #5
0
        public void Test_OneSide_RecursiveSecurity_ChecksAccessOnNestedCall()
        {
            SecurableObject securableObject = _testHelper.CreateSecurableObject();
            SecurableObject newObject       = _testHelper.CreateSecurableObject();

            _testHelper.Transaction.ExecuteInScope(() => securableObject.OtherParent = _testHelper.CreateSecurableObject());
            _testHelper.ExpectPermissionReflectorGetRequiredMethodPermissions(_setMethodInformation, TestAccessTypes.First);

            var endPointDefinition = securableObject.ID.ClassDefinition.GetRelationEndPointDefinition(typeof(SecurableObject).FullName + ".Parent");

            HasAccessDelegate hasAccess = delegate
            {
                securableObject.OtherParent = newObject;
                return(true);
            };

            _testHelper.ExpectObjectSecurityStrategyHasAccess(securableObject, TestAccessTypes.First, hasAccess);
            _testHelper.ReplayAll();

            _extension.RelationChanging(_testHelper.Transaction, securableObject, endPointDefinition, null, null);

            _testHelper.VerifyAll();
        }
コード例 #6
0
        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);
        }