Ejemplo n.º 1
0
        internal void RemoveMembers(int groupId, IEnumerable <int> groupIds, IEnumerable <int> userIds, IEnumerable <int> parentGroupIds)
        {
            SecurityGroup group;

            if (!this.Groups.TryGetValue(groupId, out group))
            {
                return;
            }


            if (userIds != null)
            {
                foreach (var userId in userIds)
                {
                    group.UserMemberIds.Remove(userId);
                    Flattener.RemoveUserFromGroup(userId, group, this.Membership, this.Groups);
                }
            }


            // support list for refreshing flattened membership
            List <int> allUsers;
            List <int> allParents;

            if (groupIds != null)
            {
                var memberGroups = group.Groups.Where(x => groupIds.Contains(x.Id)).ToArray();
                foreach (var memberGroup in memberGroups)
                {
                    allUsers   = Flattener.GetAllUserIds(memberGroup);
                    allParents = Flattener.GetAllParentGroupIdsInclusive(memberGroup);

                    memberGroup.ParentGroups.Remove(group);
                    group.Groups.Remove(memberGroup);

                    // refresh flattening
                    Flattener.DeleteGroup(memberGroup, allUsers, allParents, this.Groups, this.Membership);
                }
            }
            if (parentGroupIds != null)
            {
                var parentGroups = group.ParentGroups.Where(x => parentGroupIds.Contains(x.Id)).ToArray();
                foreach (var parentGroup in parentGroups)
                {
                    allUsers   = Flattener.GetAllUserIds(parentGroup);
                    allParents = Flattener.GetAllParentGroupIdsInclusive(parentGroup);

                    parentGroup.Groups.Remove(group);
                    group.ParentGroups.Remove(parentGroup);

                    // refresh flattening
                    Flattener.DeleteGroup(parentGroup, allUsers, allParents, this.Groups, this.Membership);
                }
            }
        }