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))); } }
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)); }