private IEnumerable<IAzManSid> getApplicationGroupSidMembers(IAzManApplication application, bool isMember, IAzManSid groupObjectSid) { var applicationGroup = (from ag in application.ApplicationGroups.Values where ag.SID.StringValue == groupObjectSid.StringValue select ag).First(); IEnumerable<IAzManSid> result = new IAzManSid[0]; //Store Group members var membersResult = from agm in applicationGroup.Members.Values where agm.ApplicationGroup.ApplicationGroupId == applicationGroup.ApplicationGroupId && agm.IsMember == isMember && ((this.storage.Mode == NetSqlAzManMode.Administrator && (agm.WhereDefined == WhereDefined.LDAP || agm.WhereDefined == WhereDefined.Database)) || (this.storage.Mode == NetSqlAzManMode.Developer && agm.WhereDefined >= WhereDefined.LDAP && agm.WhereDefined <= WhereDefined.Database)) select agm.SID; result = result.Union(membersResult); //BASIC GROUP if (applicationGroup.GroupType == GroupType.Basic) { //Sub Store Groups var subMembers = from agm in applicationGroup.Members.Values where agm.ApplicationGroup.ApplicationGroupId == applicationGroup.ApplicationGroupId && agm.IsMember == isMember && agm.WhereDefined == WhereDefined.Store select agm; foreach (var subMember in subMembers) { //recursive call bool nonMemberType; if (isMember) { if (subMember.IsMember == false) nonMemberType = false; else nonMemberType = true; } else { if (subMember.IsMember == false) nonMemberType = true; else nonMemberType = false; } var subMembersResult = this.getStoreGroupSidMembers(application.Store, nonMemberType, subMember.SID); result = result.Union(subMembersResult); } //Sub Application Groups var subMembers2 = from agm in applicationGroup.Members.Values where agm.ApplicationGroup.ApplicationGroupId == applicationGroup.ApplicationGroupId && agm.IsMember == isMember && agm.WhereDefined == WhereDefined.Application select agm; foreach (var subMember in subMembers2) { //recursive call bool nonMemberType; if (isMember) { if (subMember.IsMember == false) nonMemberType = false; else nonMemberType = true; } else { if (subMember.IsMember == false) nonMemberType = true; else nonMemberType = false; } var subMembersResult = this.getApplicationGroupSidMembers(application, nonMemberType, subMember.SID); result = result.Union(subMembersResult); } return result; } else if (applicationGroup.GroupType == GroupType.LDapQuery && isMember == true) { //LDAP Group return this.getCachedLDAPQueryResults(applicationGroup); } else { //Empty result return new IAzManSid[0]; } }
private IEnumerable<IAzManSid> getStoreGroupSidMembers(IAzManStore store, bool isMember, IAzManSid groupObjectSid) { IEnumerable<IAzManSid> result = new IAzManSid[0]; var storeGroup = (from sg in store.StoreGroups.Values where sg.SID.StringValue == groupObjectSid.StringValue select sg).First(); //BASIC GROUP if (storeGroup.GroupType == GroupType.Basic) { //Windows SIDs var membersResult = from sgm in storeGroup.Members.Values where sgm.StoreGroup.StoreGroupId == storeGroup.StoreGroupId && sgm.IsMember == isMember && ((this.storage.Mode == NetSqlAzManMode.Administrator && (sgm.WhereDefined == WhereDefined.LDAP || sgm.WhereDefined == WhereDefined.Database)) || (this.storage.Mode == NetSqlAzManMode.Developer && sgm.WhereDefined >= WhereDefined.LDAP && sgm.WhereDefined <= WhereDefined.Database)) select sgm.SID; result = result.Union(membersResult); //Sub Store Groups var subMembers = from sgm in storeGroup.Members.Values where sgm.StoreGroup.StoreGroupId == storeGroup.StoreGroupId && sgm.IsMember == isMember && sgm.WhereDefined == WhereDefined.Store select sgm; foreach (var subMember in subMembers) { //recursive call bool nonMemberType; if (isMember) { if (subMember.IsMember == false) nonMemberType = false; else nonMemberType = true; } else { if (subMember.IsMember == false) nonMemberType = true; else nonMemberType = false; } var subMembersResult = this.getStoreGroupSidMembers(store, nonMemberType, subMember.SID); result = result.Union(subMembersResult); } return result; } else if (storeGroup.GroupType == GroupType.LDapQuery && isMember == true) { return this.getCachedLDAPQueryResults(storeGroup); } else { //Empty result return result; } }