Ejemplo n.º 1
0
        public void CreateSecurityContext()
        {
            OrganizationalStructureTestHelper testHelper = new OrganizationalStructureTestHelper();

            using (testHelper.Transaction.EnterNonDiscardingScope())
            {
                Position position = testHelper.CreatePosition("PositionName");
                position.Delegation = Delegation.Enabled;

                ISecurityContext securityContext = ((ISecurityContextFactory)position).CreateSecurityContext();
                Assert.That(Type.GetType(securityContext.Class), Is.EqualTo(position.GetPublicDomainObjectType()));
                Assert.That(securityContext.Owner, Is.Null);
                Assert.That(securityContext.OwnerGroup, Is.Null);
                Assert.That(securityContext.OwnerTenant, Is.Null);
                Assert.That(securityContext.AbstractRoles, Is.Empty);
                Assert.That(securityContext.GetNumberOfStates(), Is.EqualTo(1));
                Assert.That(securityContext.GetState("Delegation"), Is.EqualTo(EnumWrapper.Get(Delegation.Enabled)));
            }
        }
Ejemplo n.º 2
0
        private bool MatchesState(ISecurityContext context, State state)
        {
            if (!context.ContainsState(state.PropertyName))
            {
                throw CreateAccessControlException("The state '{0}' is missing in the security context.", state.PropertyName);
            }

            var enumWrapper = context.GetState(state.PropertyName);

            var validStates = _securityContextRepository.GetStatePropertyValues(state.PropertyHandle);

            if (!validStates.Contains(enumWrapper.Name))
            {
                throw CreateAccessControlException(
                          "The state '{0}' is not defined for the property '{1}' of the securable class '{2}' or its base classes.",
                          enumWrapper.Name,
                          state.PropertyName,
                          context.Class);
            }

            return(enumWrapper.Name.Equals(state.Value));
        }