// Returns a list of AclExpansionEntry for the passed User, ACE with the passed Positon and passed GroupSelection private List <AclExpansionEntry> GetAclExpansionEntryList_UserPositionGroupSelection( User user, Position position, GroupCondition groupCondition, GroupHierarchyCondition groupHierarchyCondition) { List <User> userList = new List <User> (); userList.Add(user); var userFinderStub = MockRepository.GenerateStub <IAclExpanderUserFinder> (); userFinderStub.Expect(mock => mock.FindUsers()).Return(userList); List <AccessControlList> aclList = new List <AccessControlList>(); var ace = TestHelper.CreateAceWithPositionAndGroupCondition(position, groupCondition); ace.GroupHierarchyCondition = groupHierarchyCondition; AttachAccessTypeReadWriteDelete(ace, true, null, true); Assert.That(ace.Validate().IsValid); var acl = TestHelper.CreateStatefulAcl(ace); aclList.Add(acl); var aclFinderStub = MockRepository.GenerateStub <IAclExpanderAclFinder> (); aclFinderStub.Expect(mock => mock.FindAccessControlLists()).Return(aclList); var aclExpander = new AclExpander(userFinderStub, aclFinderStub); // Retrieve the resulting list of AclExpansionEntry|s var aclExpansionEntryList = aclExpander.GetAclExpansionEntryList(); return(aclExpansionEntryList); }
public void AssertGroupHierarchyCondition(Group owningGroup, GroupHierarchyCondition groupHierarchyCondition, string inResultingHtmlString, string[] notInResultingHtmlStrings) { var accessConditions = new AclExpansionAccessConditions { OwningGroup = owningGroup, GroupHierarchyCondition = groupHierarchyCondition }; var aclExpansionEntry = new AclExpansionEntry( User, Role, Acl, accessConditions, new AccessTypeDefinition[0], new AccessTypeDefinition[0]); List <AclExpansionEntry> aclExpansion = ListObjectMother.New(aclExpansionEntry); var stringWriter = new StringWriter(); var aclExpansionHtmlWriter = new AclExpansionHtmlWriter(stringWriter, true, new AclExpansionHtmlWriterSettings()); aclExpansionHtmlWriter.WriteAclExpansion(aclExpansion); string result = stringWriter.ToString(); //Clipboard.SetText (result); Assert.That(result, Is.StringContaining(inResultingHtmlString)); foreach (string notInResultingHtml in notInResultingHtmlStrings) { Assert.That(result, Is.Not.StringContaining(notInResultingHtml)); } }
private bool MatchPrincipalAgainstGroup(Principal principal, Group referenceGroup, GroupHierarchyCondition groupHierarchyCondition) { if (referenceGroup == null) { return(false); } var principalRoles = GetMatchingPrincipalRoles(principal); var principalGroups = principalRoles.Select(r => r.Group.GetObjectReference()); Func <bool> isPrincipalMatchingReferenceGroupOrParents = () => principalGroups.Intersect(GetGroupAndParents(referenceGroup)).Any(); Func <bool> isPrincipalMatchingReferenceGroupOrChildren = () => principalGroups.SelectMany(GetGroupAndParents).Contains(referenceGroup); switch (groupHierarchyCondition) { case GroupHierarchyCondition.Undefined: throw CreateInvalidOperationException("The value 'Undefined' is not a valid value for matching the 'GroupHierarchyCondition'."); case GroupHierarchyCondition.This: return(principalGroups.Contains(referenceGroup)); case GroupHierarchyCondition.Parent: throw CreateInvalidOperationException("The value 'Parent' is not a valid value for matching the 'GroupHierarchyCondition'."); case GroupHierarchyCondition.Children: throw CreateInvalidOperationException("The value 'Children' is not a valid value for matching the 'GroupHierarchyCondition'."); case GroupHierarchyCondition.ThisAndParent: return(isPrincipalMatchingReferenceGroupOrParents()); case GroupHierarchyCondition.ThisAndChildren: return(isPrincipalMatchingReferenceGroupOrChildren()); case GroupHierarchyCondition.ThisAndParentAndChildren: return(isPrincipalMatchingReferenceGroupOrParents() || isPrincipalMatchingReferenceGroupOrChildren()); default: throw CreateInvalidOperationException("The value '{0}' is not a valid value for 'GroupHierarchyCondition'.", groupHierarchyCondition); } }