diff --git a/app/assets/javascripts/members/constants.js b/app/assets/javascripts/members/constants.js index a442d631fda87fdaee60e450362e8fa6144a5ed9..c574b057d267412bd462440271af25d46a236548 100644 --- a/app/assets/javascripts/members/constants.js +++ b/app/assets/javascripts/members/constants.js @@ -139,12 +139,7 @@ export const FILTERED_SEARCH_TOKEN_WITH_INHERITED_PERMISSIONS = { operators: OPERATORS_IS, options: [ { value: 'exclude', title: s__('Members|Direct') }, - { - value: 'only', - title: gon.features?.webuiMembersInheritedUsers - ? s__('Members|Indirect') - : s__('Members|Inherited'), - }, + { value: 'only', title: s__('Members|Indirect') }, ], }; diff --git a/app/controllers/concerns/membership_actions.rb b/app/controllers/concerns/membership_actions.rb index 231adfefc198e0ec523e590ed17b5887270bb6ca..7deb9cd521a13504ceeb2af93552c27aa9b3ea88 100644 --- a/app/controllers/concerns/membership_actions.rb +++ b/app/controllers/concerns/membership_actions.rb @@ -185,8 +185,6 @@ def update_success_response(result) end def shared_members_relations - return [] unless Feature.enabled?(:webui_members_inherited_users, current_user) - project_relations = [:invited_groups, :shared_into_ancestors] [:shared_from_groups, *(project_relations if params[:project_id])] end diff --git a/app/controllers/groups/group_members_controller.rb b/app/controllers/groups/group_members_controller.rb index 48b8629eb15d793538875cd5bdc8c62d40ed0df9..59d9e247a85e46d31cc12e82439774ff9ea5340a 100644 --- a/app/controllers/groups/group_members_controller.rb +++ b/app/controllers/groups/group_members_controller.rb @@ -21,7 +21,6 @@ def self.admin_not_required_endpoints push_frontend_feature_flag(:importer_user_mapping, current_user) push_frontend_feature_flag(:importer_user_mapping_reassignment_csv, current_user) push_frontend_feature_flag(:service_accounts_crud, @group) - push_frontend_feature_flag(:webui_members_inherited_users, current_user) end skip_before_action :check_two_factor_requirement, only: :leave diff --git a/app/controllers/projects/project_members_controller.rb b/app/controllers/projects/project_members_controller.rb index b9a971c93e07d604e431c72524a68e60d788a023..168ae402898de1507fa2ae3396a7167413d0f103 100644 --- a/app/controllers/projects/project_members_controller.rb +++ b/app/controllers/projects/project_members_controller.rb @@ -8,10 +8,6 @@ class Projects::ProjectMembersController < Projects::ApplicationController # Authorize before_action :authorize_admin_project_member!, except: [:index, :leave, :request_access] - before_action only: [:index] do - push_frontend_feature_flag(:webui_members_inherited_users, current_user) - end - feature_category :groups_and_projects urgency :low diff --git a/app/finders/group_members_finder.rb b/app/finders/group_members_finder.rb index de52187031a93121c2f3aafe19a37878697cd65d..379a7a9eb78194dd0bf5152091e78f347146ed87 100644 --- a/app/finders/group_members_finder.rb +++ b/app/finders/group_members_finder.rb @@ -56,7 +56,7 @@ def groups_by_relations(include_relations) if include_relations.include?(:shared_from_groups) related_groups[:shared_from_groups] = - if group.member?(user) && Feature.enabled?(:webui_members_inherited_users, user) + if group.member?(user) Group.shared_into_ancestors(group) else Group.shared_into_ancestors(group).public_or_visible_to_user(user) diff --git a/app/finders/members_finder.rb b/app/finders/members_finder.rb index 285f2d01dc973c184ef0ba9242374d3a29a51d9e..a4624681ef5cc67bb90df829c745ec541b38a830 100644 --- a/app/finders/members_finder.rb +++ b/app/finders/members_finder.rb @@ -85,7 +85,7 @@ def direct_group_members(include_relations) def project_invited_groups invited_groups_including_ancestors = project.invited_groups.self_and_ancestors - if Feature.disabled?(:webui_members_inherited_users, current_user) || !project.member?(current_user) + unless project.member?(current_user) invited_groups_including_ancestors = invited_groups_including_ancestors.public_or_visible_to_user(current_user) end diff --git a/app/models/members/members/invited_private_group_accessibility_assigner.rb b/app/models/members/members/invited_private_group_accessibility_assigner.rb index e4dafd56a16cf5fcb9db0b6bb49adacf63554168..152c6b57d81f5efb3730bd1dd9e06cb8f1367a3b 100644 --- a/app/models/members/members/invited_private_group_accessibility_assigner.rb +++ b/app/models/members/members/invited_private_group_accessibility_assigner.rb @@ -23,8 +23,6 @@ def initialize(members, source:, current_user:) end def execute - return if Feature.disabled?(:webui_members_inherited_users, current_user) - # We don't need to calculate the access level of the current user in the invited groups if: # # 1. The current user can admin members then the user should be able to see the source of all memberships diff --git a/config/feature_flags/development/webui_members_inherited_users.yml b/config/feature_flags/development/webui_members_inherited_users.yml deleted file mode 100644 index 47005c333ae6e3e591ae7d2ada46898ab7c5b770..0000000000000000000000000000000000000000 --- a/config/feature_flags/development/webui_members_inherited_users.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -name: webui_members_inherited_users -introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/83214 -rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/364078 -milestone: '15.4' -type: development -group: group::tenant scale -default_enabled: true diff --git a/doc/api/members.md b/doc/api/members.md index 5d0893a7b5d5b94e5de898042f6c246197293e44..44c2ab853acf3932feb24b5472ad8bca6d1c16b9 100644 --- a/doc/api/members.md +++ b/doc/api/members.md @@ -111,10 +111,7 @@ Example response: > - [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/219230) to return members of the invited private group if the current user is a member of the shared group or project in GitLab 16.10 [with a flag](../administration/feature_flags.md) named `webui_members_inherited_users`. Disabled by default. > - Feature flag `webui_members_inherited_users` was [enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/219230) in GitLab 17.0. - -FLAG: -On self-managed GitLab, by default this feature is available. To hide the feature per user, an administrator can [disable the feature flag](../administration/feature_flags.md) named `webui_members_inherited_users`. -On GitLab.com and GitLab Dedicated, this feature is available. +> - Feature flag `webui_members_inherited_users` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/163627) in GitLab 17.4. Members of invited groups displayed by default. Gets a list of group or project members viewable by the authenticated user, including inherited members, invited users, and permissions through ancestor groups. @@ -275,10 +272,7 @@ Example response: > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/17744) in GitLab 12.4. > - [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/219230) to return members of the invited private group if the current user is a member of the shared group or project in GitLab 16.10 [with a flag](../administration/feature_flags.md) named `webui_members_inherited_users`. Disabled by default. > - [Enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/219230) in GitLab 17.0. - -FLAG: -On self-managed GitLab, by default this feature is available. To hide the feature per user, an administrator can [disable the feature flag](../administration/feature_flags.md) named `webui_members_inherited_users`. -On GitLab.com and GitLab Dedicated, this feature is available. +> - Feature flag `webui_members_inherited_users` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/163627) in GitLab 17.4. Members of invited groups displayed by default. Gets a member of a group or project, including members inherited or invited through ancestor groups. See the corresponding [endpoint to list all inherited members](#list-all-members-of-a-group-or-project-including-inherited-and-invited-members) for details. diff --git a/doc/user/group/subgroups/index.md b/doc/user/group/subgroups/index.md index 3ac912b5021e0ae58bebc9024dfd0a71f1d1eb41..b0a79127072820a0fff30207ca5c1bbe3b45d8e0 100644 --- a/doc/user/group/subgroups/index.md +++ b/doc/user/group/subgroups/index.md @@ -124,10 +124,7 @@ For more information, view the [permissions table](../../permissions.md#group-me > - [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/219230) to display invited group members on the Members tab of the Members page in GitLab 16.10 [with a flag](../../../administration/feature_flags.md) named `webui_members_inherited_users`. Disabled by default. > - [Enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/219230) in GitLab 17.0. - -FLAG: -On self-managed GitLab, by default this feature is available. To hide the feature per user, an administrator can [disable the feature flag](../../../administration/feature_flags.md) named `webui_members_inherited_users`. -On GitLab.com and GitLab Dedicated, this feature is available. +> - Feature flag `webui_members_inherited_users` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/163627) in GitLab 17.4. Members of invited groups displayed by default. When you add a member to a group, that member is also added to all subgroups of that group. The member's permissions are inherited from the group into all subgroups. diff --git a/doc/user/project/members/index.md b/doc/user/project/members/index.md index 6ec71757b2c323dfe595ca7752820a1874a6e52f..397a19f83f22c3b33c1842fcdb5f8e530498ae6c 100644 --- a/doc/user/project/members/index.md +++ b/doc/user/project/members/index.md @@ -18,10 +18,7 @@ Each member gets a role, which determines what they can do in the project. > - [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/219230) to display invited group members on the Members tab of the Members page in GitLab 16.10 [with a flag](../../../administration/feature_flags.md) named `webui_members_inherited_users`. Disabled by default. > - Feature flag `webui_members_inherited_users` was [enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/219230) in GitLab 17.0. - -FLAG: -On self-managed GitLab, by default this feature is available. To hide the feature per user, an administrator can [disable the feature flag](../../../administration/feature_flags.md) named `webui_members_inherited_users`. -On GitLab.com and GitLab Dedicated, this feature is available. +> - Feature flag `webui_members_inherited_users` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/163627) in GitLab 17.4. Members of invited groups displayed by default. Users can become members of a group or project directly or indirectly. Indirect membership can be inherited, shared, or inherited shared. diff --git a/doc/user/project/members/sharing_projects_groups.md b/doc/user/project/members/sharing_projects_groups.md index 522eed9b83d1b78ce9adaded968223996d41f0fa..4eeecadd98361c4a3b4fccbb29b25bba6da6626b 100644 --- a/doc/user/project/members/sharing_projects_groups.md +++ b/doc/user/project/members/sharing_projects_groups.md @@ -11,11 +11,8 @@ DETAILS: **Offering:** GitLab.com, Self-managed, GitLab Dedicated > - [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/219230) to display invited group members on the Members tab of the Members page in GitLab 16.10 [with a flag](../../../administration/feature_flags.md) named `webui_members_inherited_users`. Disabled by default. -> - Feature flag `webui_members_inherited_users` [enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/219230) in GitLab 17.0. - -FLAG: -On self-managed GitLab, by default this feature is available. To hide the feature per user, an administrator can [disable the feature flag](../../../administration/feature_flags.md) named `webui_members_inherited_users`. -On GitLab.com and GitLab Dedicated, this feature is available. +> - Feature flag `webui_members_inherited_users` was [enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/219230) in GitLab 17.0. +> - Feature flag `webui_members_inherited_users` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/163627) in GitLab 17.4. Members of invited groups displayed by default. You can share by invitation: diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 911270a7d32e35601c892f2d9f0e38db7dcea263..444b17e21bdb9e04bc12d6ee9de3e31f131ee630 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -33145,9 +33145,6 @@ msgstr "" msgid "Members|Indirect" msgstr "" -msgid "Members|Inherited" -msgstr "" - msgid "Members|Inherited from %{group}" msgstr "" diff --git a/spec/controllers/groups/group_members_controller_spec.rb b/spec/controllers/groups/group_members_controller_spec.rb index 896a9123b4d1fdd28a065e11e026721dd43db006..773cf9edb4791d43f92d6f8dc709a01ea256434d 100644 --- a/spec/controllers/groups/group_members_controller_spec.rb +++ b/spec/controllers/groups/group_members_controller_spec.rb @@ -180,25 +180,6 @@ expect(assigns(:members).map(&:user_id)).to contain_exactly(user.id, shared_group_user.id) end end - - context 'when webui_members_inherited_users is disabled' do - let_it_be(:shared_group) { create(:group) } - let_it_be(:shared_group_user) { create(:user) } - let_it_be(:group_link) { create(:group_group_link, shared_group: shared_group, shared_with_group: group) } - - before do - group.add_owner(user) - shared_group.add_owner(shared_group_user) - stub_feature_flags(webui_members_inherited_users: false) - sign_in(user) - end - - it 'lists inherited group members only' do - get :index, params: { group_id: shared_group } - - expect(assigns(:members).map(&:user_id)).to contain_exactly(shared_group_user.id) - end - end end describe 'PUT update' do diff --git a/spec/controllers/projects/project_members_controller_spec.rb b/spec/controllers/projects/project_members_controller_spec.rb index 33cae4e667035b50201b369e3932368fb3139422..5b0c2d5c7073459e1842259c358f83e48f546a82 100644 --- a/spec/controllers/projects/project_members_controller_spec.rb +++ b/spec/controllers/projects/project_members_controller_spec.rb @@ -107,18 +107,6 @@ shared_examples 'users are invited through groups' do let_it_be(:invited_group_member) { create(:user) } - context 'when webui_members_inherited_users is disabled' do - before do - stub_feature_flags(webui_members_inherited_users: false) - end - - it 'lists only direct members' do - get :index, params: { namespace_id: project.namespace, project_id: project } - - expect(assigns(:project_members).map(&:user_id)).not_to include(invited_group_member.id) - end - end - it 'lists invited group members by default' do get :index, params: { namespace_id: project.namespace, project_id: project } diff --git a/spec/features/groups/members/filter_members_spec.rb b/spec/features/groups/members/filter_members_spec.rb index 6bf0f2254bbad3a949fe6754a4280137274fdcd5..9002c7ba6483ae87ea28ac813a18ef849b5632f3 100644 --- a/spec/features/groups/members/filter_members_spec.rb +++ b/spec/features/groups/members/filter_members_spec.rb @@ -80,23 +80,6 @@ end end - context 'when the `webui_members_inherited_users` feature flag is disabled' do - before do - stub_feature_flags(webui_members_inherited_users: false) - end - - it 'shows only inherited members' do - visit_members_list(nested_group, with_inherited_permissions: 'only') - expect(member(0)).to include(user.name) - expect(member(1)).to include(user_with_2fa.name) - expect(all_rows.size).to eq(2) - - within filtered_search_bar_selector do - expect(page).to have_content 'Membership = Inherited' - end - end - end - def visit_members_list(group, options = {}) visit group_group_members_path(group.to_param, options) end diff --git a/spec/finders/group_members_finder_spec.rb b/spec/finders/group_members_finder_spec.rb index fad98dbcf3eb3839c3078570b2e6091cffec7945..d801315fb6961951b909a70a936c306316a73c9c 100644 --- a/spec/finders/group_members_finder_spec.rb +++ b/spec/finders/group_members_finder_spec.rb @@ -111,19 +111,6 @@ expect(result.to_a).to match_array(expected_members) end end - - context 'when webui_members_inherited_users feature flag is disabled' do - before do - stub_feature_flags(webui_members_inherited_users: false) - end - - it 'does not return private invited group members' do - result = described_class.new(groups[subject_group], user6).execute(include_relations: subject_relations) - - expected_members = visible_members.map { |name| members[name] } - expect(result.to_a).to match_array(expected_members) - end - end end it 'returns the correct access level of the members shared through group sharing' do diff --git a/spec/finders/members_finder_spec.rb b/spec/finders/members_finder_spec.rb index 4c63e6bf8075c32d2274f95a7c3178494945f3e3..ed7fef64d84e33e56283befddbbc4258c15210d6 100644 --- a/spec/finders/members_finder_spec.rb +++ b/spec/finders/members_finder_spec.rb @@ -256,16 +256,6 @@ it 'includes members from invited groups not visible to the user' do expect(members).to contain_exactly(linked_group_member, private_linked_group_member, project_member) end - - context 'when webui_members_inherited_users feature flag is disabled' do - before do - stub_feature_flags(webui_members_inherited_users: false) - end - - it 'excludes members from invited groups not visible to the user' do - expect(members).to contain_exactly(linked_group_member, project_member) - end - end end context 'when the user is a member of invited group and ancestor groups' do diff --git a/spec/models/members/members/invited_private_group_accessibility_assigner_spec.rb b/spec/models/members/members/invited_private_group_accessibility_assigner_spec.rb index ef32c8fbb19f8517b8f579cf19e8106b7f093493..1d22d50aa36a76768adf8c1dbfa27f857c5cfd78 100644 --- a/spec/models/members/members/invited_private_group_accessibility_assigner_spec.rb +++ b/spec/models/members/members/invited_private_group_accessibility_assigner_spec.rb @@ -29,15 +29,8 @@ let(:source) { create(source_type, source_visibility) } let(:direct_member) { source.add_developer(member_user) } let(:members) { [direct_member] } - it_behaves_like 'sets is_source_accessible_to_current_user to true for all members' - - context 'with webui_members_inherited_users feature flag disabled' do - before do - stub_feature_flags(webui_members_inherited_users: false) - end - it_behaves_like 'sets is_source_accessible_to_current_user to true for all members' - end + it_behaves_like 'sets is_source_accessible_to_current_user to true for all members' end end @@ -51,14 +44,6 @@ let(:members) { [inherited_member] } it_behaves_like 'sets is_source_accessible_to_current_user to true for all members' - - context 'with webui_members_inherited_users feature flag disabled' do - before do - stub_feature_flags(webui_members_inherited_users: false) - end - - it_behaves_like 'sets is_source_accessible_to_current_user to true for all members' - end end end @@ -79,14 +64,6 @@ expect(members.first.is_source_accessible_to_current_user).to eq(can_see_invited_members_source?) end - context 'with webui_members_inherited_users feature flag disabled' do - before do - stub_feature_flags(webui_members_inherited_users: false) - end - - it_behaves_like 'sets is_source_accessible_to_current_user to true for all members' - end - context 'with multiple members belonging to the same source' do it 'avoid N+1 queries' do assigner # Initialize objects in let blocks diff --git a/spec/requests/groups/group_members_controller_spec.rb b/spec/requests/groups/group_members_controller_spec.rb index bb331ba7f712ab0417921487e6177abf7aa6f4cb..4df630492aef0b086b3c9a82201e5f43fb09c544 100644 --- a/spec/requests/groups/group_members_controller_spec.rb +++ b/spec/requests/groups/group_members_controller_spec.rb @@ -20,7 +20,6 @@ expect(response.body).to have_pushed_frontend_feature_flags(importerUserMapping: true) expect(response.body).to have_pushed_frontend_feature_flags(serviceAccountsCrud: true) - expect(response.body).to have_pushed_frontend_feature_flags(webuiMembersInheritedUsers: true) end end