Skip to content

Make group scope consistent for scan_finding rules

What does this MR do and why?

Make group scope consistent for scan_finding rules creation.

It aligns this part of the code with how groups are fetched and scoped with other approval rules.

Related slack discussion: https://gitlab.slack.com/archives/CFHGVJ06R/p1651003048059459

How to set up and validate locally

  1. Create a policy management project
  2. Create a scan result policy.
  3. As part of the previous step make sure a group which is invited as a member of the project is added as approver.
  4. After merging the MR, instead of waiting for the worker, run the following:
Security::CreateOrchestrationPolicyWorker.new.perform

Expected behaviour: All approval rules created will have approvers:

ApprovalProjectRule.scan_finding.map(&:approvers)

Prior to this change, the behaviour was the following: approvers returns empty

Query plan

New scope (by_path)

output from postgres.ai: https://console.postgres.ai/gitlab/gitlab-production-tunnel-pg12/sessions/9937/commands/35139

query
SELECT 
  "namespaces"."id", 
  "namespaces"."name", 
  "namespaces"."path", 
  "namespaces"."owner_id", 
  "namespaces"."created_at", 
  "namespaces"."updated_at", 
  "namespaces"."type", 
  "namespaces"."description", 
  "namespaces"."avatar", 
  "namespaces"."membership_lock", 
  "namespaces"."share_with_group_lock", 
  "namespaces"."visibility_level", 
  "namespaces"."request_access_enabled", 
  "namespaces"."ldap_sync_status", 
  "namespaces"."ldap_sync_error", 
  "namespaces"."ldap_sync_last_update_at", 
  "namespaces"."ldap_sync_last_successful_update_at", 
  "namespaces"."ldap_sync_last_sync_at", 
  "namespaces"."description_html", 
  "namespaces"."lfs_enabled", 
  "namespaces"."parent_id", 
  "namespaces"."shared_runners_minutes_limit", 
  "namespaces"."repository_size_limit", 
  "namespaces"."require_two_factor_authentication", 
  "namespaces"."two_factor_grace_period", 
  "namespaces"."cached_markdown_version", 
  "namespaces"."project_creation_level", 
  "namespaces"."runners_token", 
  "namespaces"."file_template_project_id", 
  "namespaces"."saml_discovery_token", 
  "namespaces"."runners_token_encrypted", 
  "namespaces"."custom_project_templates_group_id", 
  "namespaces"."auto_devops_enabled", 
  "namespaces"."extra_shared_runners_minutes_limit", 
  "namespaces"."last_ci_minutes_notification_at", 
  "namespaces"."last_ci_minutes_usage_notification_level", 
  "namespaces"."subgroup_creation_level", 
  "namespaces"."emails_disabled", 
  "namespaces"."max_pages_size", 
  "namespaces"."max_artifacts_size", 
  "namespaces"."mentions_disabled", 
  "namespaces"."default_branch_protection", 
  "namespaces"."unlock_membership_to_ldap", 
  "namespaces"."max_personal_access_token_lifetime", 
  "namespaces"."push_rule_id", 
  "namespaces"."shared_runners_enabled", 
  "namespaces"."allow_descendants_override_disabled_shared_runners", 
  "namespaces"."traversal_ids" 
FROM 
  "namespaces" 
WHERE 
  "namespaces"."type" = 'Group' 
  AND "namespaces"."path" = 'gitlab-org/security-products';

Using existing Group

output from postgres.ai: https://console.postgres.ai/gitlab/gitlab-production-tunnel-pg12/sessions/9938/commands/35143

Click to expand
SELECT 
  "namespaces"."id", 
  "namespaces"."name", 
  "namespaces"."path", 
  "namespaces"."owner_id", 
  "namespaces"."created_at", 
  "namespaces"."updated_at", 
  "namespaces"."type", 
  "namespaces"."description", 
  "namespaces"."avatar", 
  "namespaces"."membership_lock", 
  "namespaces"."share_with_group_lock", 
  "namespaces"."visibility_level", 
  "namespaces"."request_access_enabled", 
  "namespaces"."ldap_sync_status", 
  "namespaces"."ldap_sync_error", 
  "namespaces"."ldap_sync_last_update_at", 
  "namespaces"."ldap_sync_last_successful_update_at", 
  "namespaces"."ldap_sync_last_sync_at", 
  "namespaces"."description_html", 
  "namespaces"."lfs_enabled", 
  "namespaces"."parent_id", 
  "namespaces"."shared_runners_minutes_limit", 
  "namespaces"."repository_size_limit", 
  "namespaces"."require_two_factor_authentication", 
  "namespaces"."two_factor_grace_period", 
  "namespaces"."cached_markdown_version", 
  "namespaces"."project_creation_level", 
  "namespaces"."runners_token", 
  "namespaces"."file_template_project_id", 
  "namespaces"."saml_discovery_token", 
  "namespaces"."runners_token_encrypted", 
  "namespaces"."custom_project_templates_group_id", 
  "namespaces"."auto_devops_enabled", 
  "namespaces"."extra_shared_runners_minutes_limit", 
  "namespaces"."last_ci_minutes_notification_at", 
  "namespaces"."last_ci_minutes_usage_notification_level", 
  "namespaces"."subgroup_creation_level", 
  "namespaces"."emails_disabled", 
  "namespaces"."max_pages_size", 
  "namespaces"."max_artifacts_size", 
  "namespaces"."mentions_disabled", 
  "namespaces"."default_branch_protection", 
  "namespaces"."unlock_membership_to_ldap", 
  "namespaces"."max_personal_access_token_lifetime", 
  "namespaces"."push_rule_id", 
  "namespaces"."shared_runners_enabled", 
  "namespaces"."allow_descendants_override_disabled_shared_runners", 
  "namespaces"."traversal_ids" 
FROM 
  "namespaces" 
WHERE 
  "namespaces"."type" = 'Group' 
  AND (
    "namespaces"."visibility_level" IN (0, 10, 20) 
    OR EXISTS (
      SELECT 
        1 
      FROM 
        (
          SELECT 
            "namespaces"."id", 
            "namespaces"."name", 
            "namespaces"."path", 
            "namespaces"."owner_id", 
            "namespaces"."created_at", 
            "namespaces"."updated_at", 
            "namespaces"."type", 
            "namespaces"."description", 
            "namespaces"."avatar", 
            "namespaces"."membership_lock", 
            "namespaces"."share_with_group_lock", 
            "namespaces"."visibility_level", 
            "namespaces"."request_access_enabled", 
            "namespaces"."ldap_sync_status", 
            "namespaces"."ldap_sync_error", 
            "namespaces"."ldap_sync_last_update_at", 
            "namespaces"."ldap_sync_last_successful_update_at", 
            "namespaces"."ldap_sync_last_sync_at", 
            "namespaces"."description_html", 
            "namespaces"."lfs_enabled", 
            "namespaces"."parent_id", 
            "namespaces"."shared_runners_minutes_limit", 
            "namespaces"."repository_size_limit", 
            "namespaces"."require_two_factor_authentication", 
            "namespaces"."two_factor_grace_period", 
            "namespaces"."cached_markdown_version", 
            "namespaces"."project_creation_level", 
            "namespaces"."runners_token", 
            "namespaces"."file_template_project_id", 
            "namespaces"."saml_discovery_token", 
            "namespaces"."runners_token_encrypted", 
            "namespaces"."custom_project_templates_group_id", 
            "namespaces"."auto_devops_enabled", 
            "namespaces"."extra_shared_runners_minutes_limit", 
            "namespaces"."last_ci_minutes_notification_at", 
            "namespaces"."last_ci_minutes_usage_notification_level", 
            "namespaces"."subgroup_creation_level", 
            "namespaces"."emails_disabled", 
            "namespaces"."max_pages_size", 
            "namespaces"."max_artifacts_size", 
            "namespaces"."mentions_disabled", 
            "namespaces"."default_branch_protection", 
            "namespaces"."unlock_membership_to_ldap", 
            "namespaces"."max_personal_access_token_lifetime", 
            "namespaces"."push_rule_id", 
            "namespaces"."shared_runners_enabled", 
            "namespaces"."allow_descendants_override_disabled_shared_runners", 
            "namespaces"."traversal_ids" 
          FROM 
            (
              (
                WITH "direct_groups" AS MATERIALIZED (
                  SELECT 
                    "namespaces"."id", 
                    "namespaces"."name", 
                    "namespaces"."path", 
                    "namespaces"."owner_id", 
                    "namespaces"."created_at", 
                    "namespaces"."updated_at", 
                    "namespaces"."type", 
                    "namespaces"."description", 
                    "namespaces"."avatar", 
                    "namespaces"."membership_lock", 
                    "namespaces"."share_with_group_lock", 
                    "namespaces"."visibility_level", 
                    "namespaces"."request_access_enabled", 
                    "namespaces"."ldap_sync_status", 
                    "namespaces"."ldap_sync_error", 
                    "namespaces"."ldap_sync_last_update_at", 
                    "namespaces"."ldap_sync_last_successful_update_at", 
                    "namespaces"."ldap_sync_last_sync_at", 
                    "namespaces"."description_html", 
                    "namespaces"."lfs_enabled", 
                    "namespaces"."parent_id", 
                    "namespaces"."shared_runners_minutes_limit", 
                    "namespaces"."repository_size_limit", 
                    "namespaces"."require_two_factor_authentication", 
                    "namespaces"."two_factor_grace_period", 
                    "namespaces"."cached_markdown_version", 
                    "namespaces"."project_creation_level", 
                    "namespaces"."runners_token", 
                    "namespaces"."file_template_project_id", 
                    "namespaces"."saml_discovery_token", 
                    "namespaces"."runners_token_encrypted", 
                    "namespaces"."custom_project_templates_group_id", 
                    "namespaces"."auto_devops_enabled", 
                    "namespaces"."extra_shared_runners_minutes_limit", 
                    "namespaces"."last_ci_minutes_notification_at", 
                    "namespaces"."last_ci_minutes_usage_notification_level", 
                    "namespaces"."subgroup_creation_level", 
                    "namespaces"."emails_disabled", 
                    "namespaces"."max_pages_size", 
                    "namespaces"."max_artifacts_size", 
                    "namespaces"."mentions_disabled", 
                    "namespaces"."default_branch_protection", 
                    "namespaces"."unlock_membership_to_ldap", 
                    "namespaces"."max_personal_access_token_lifetime", 
                    "namespaces"."push_rule_id", 
                    "namespaces"."shared_runners_enabled", 
                    "namespaces"."allow_descendants_override_disabled_shared_runners", 
                    "namespaces"."traversal_ids" 
                  FROM 
                    (
                      (
                        SELECT 
                          "namespaces"."id", 
                          "namespaces"."name", 
                          "namespaces"."path", 
                          "namespaces"."owner_id", 
                          "namespaces"."created_at", 
                          "namespaces"."updated_at", 
                          "namespaces"."type", 
                          "namespaces"."description", 
                          "namespaces"."avatar", 
                          "namespaces"."membership_lock", 
                          "namespaces"."share_with_group_lock", 
                          "namespaces"."visibility_level", 
                          "namespaces"."request_access_enabled", 
                          "namespaces"."ldap_sync_status", 
                          "namespaces"."ldap_sync_error", 
                          "namespaces"."ldap_sync_last_update_at", 
                          "namespaces"."ldap_sync_last_successful_update_at", 
                          "namespaces"."ldap_sync_last_sync_at", 
                          "namespaces"."description_html", 
                          "namespaces"."lfs_enabled", 
                          "namespaces"."parent_id", 
                          "namespaces"."shared_runners_minutes_limit", 
                          "namespaces"."repository_size_limit", 
                          "namespaces"."require_two_factor_authentication", 
                          "namespaces"."two_factor_grace_period", 
                          "namespaces"."cached_markdown_version", 
                          "namespaces"."project_creation_level", 
                          "namespaces"."runners_token", 
                          "namespaces"."file_template_project_id", 
                          "namespaces"."saml_discovery_token", 
                          "namespaces"."runners_token_encrypted", 
                          "namespaces"."custom_project_templates_group_id", 
                          "namespaces"."auto_devops_enabled", 
                          "namespaces"."extra_shared_runners_minutes_limit", 
                          "namespaces"."last_ci_minutes_notification_at", 
                          "namespaces"."last_ci_minutes_usage_notification_level", 
                          "namespaces"."subgroup_creation_level", 
                          "namespaces"."emails_disabled", 
                          "namespaces"."max_pages_size", 
                          "namespaces"."max_artifacts_size", 
                          "namespaces"."mentions_disabled", 
                          "namespaces"."default_branch_protection", 
                          "namespaces"."unlock_membership_to_ldap", 
                          "namespaces"."max_personal_access_token_lifetime", 
                          "namespaces"."push_rule_id", 
                          "namespaces"."shared_runners_enabled", 
                          "namespaces"."allow_descendants_override_disabled_shared_runners", 
                          "namespaces"."traversal_ids" 
                        FROM 
                          "namespaces" 
                          INNER JOIN "members" ON "namespaces"."id" = "members"."source_id" 
                        WHERE 
                          "members"."type" = 'GroupMember' 
                          AND "members"."source_type" = 'Namespace' 
                          AND "namespaces"."type" = 'Group' 
                          AND "members"."user_id" = 4906322 
                          AND "members"."requested_at" IS NULL 
                          AND (access_level >= 10)
                      ) 
                      UNION 
                        (
                          SELECT 
                            "namespaces"."id", 
                            "namespaces"."name", 
                            "namespaces"."path", 
                            "namespaces"."owner_id", 
                            "namespaces"."created_at", 
                            "namespaces"."updated_at", 
                            "namespaces"."type", 
                            "namespaces"."description", 
                            "namespaces"."avatar", 
                            "namespaces"."membership_lock", 
                            "namespaces"."share_with_group_lock", 
                            "namespaces"."visibility_level", 
                            "namespaces"."request_access_enabled", 
                            "namespaces"."ldap_sync_status", 
                            "namespaces"."ldap_sync_error", 
                            "namespaces"."ldap_sync_last_update_at", 
                            "namespaces"."ldap_sync_last_successful_update_at", 
                            "namespaces"."ldap_sync_last_sync_at", 
                            "namespaces"."description_html", 
                            "namespaces"."lfs_enabled", 
                            "namespaces"."parent_id", 
                            "namespaces"."shared_runners_minutes_limit", 
                            "namespaces"."repository_size_limit", 
                            "namespaces"."require_two_factor_authentication", 
                            "namespaces"."two_factor_grace_period", 
                            "namespaces"."cached_markdown_version", 
                            "namespaces"."project_creation_level", 
                            "namespaces"."runners_token", 
                            "namespaces"."file_template_project_id", 
                            "namespaces"."saml_discovery_token", 
                            "namespaces"."runners_token_encrypted", 
                            "namespaces"."custom_project_templates_group_id", 
                            "namespaces"."auto_devops_enabled", 
                            "namespaces"."extra_shared_runners_minutes_limit", 
                            "namespaces"."last_ci_minutes_notification_at", 
                            "namespaces"."last_ci_minutes_usage_notification_level", 
                            "namespaces"."subgroup_creation_level", 
                            "namespaces"."emails_disabled", 
                            "namespaces"."max_pages_size", 
                            "namespaces"."max_artifacts_size", 
                            "namespaces"."mentions_disabled", 
                            "namespaces"."default_branch_protection", 
                            "namespaces"."unlock_membership_to_ldap", 
                            "namespaces"."max_personal_access_token_lifetime", 
                            "namespaces"."push_rule_id", 
                            "namespaces"."shared_runners_enabled", 
                            "namespaces"."allow_descendants_override_disabled_shared_runners", 
                            "namespaces"."traversal_ids" 
                          FROM 
                            "projects" 
                            INNER JOIN "project_authorizations" ON "projects"."id" = "project_authorizations"."project_id" 
                            INNER JOIN "namespaces" ON "namespaces"."id" = "projects"."namespace_id" 
                          WHERE 
                            "project_authorizations"."user_id" = 4906322
                        )
                    ) namespaces 
                  WHERE 
                    "namespaces"."type" = 'Group'
                ) 
                SELECT 
                  "namespaces"."id", 
                  "namespaces"."name", 
                  "namespaces"."path", 
                  "namespaces"."owner_id", 
                  "namespaces"."created_at", 
                  "namespaces"."updated_at", 
                  "namespaces"."type", 
                  "namespaces"."description", 
                  "namespaces"."avatar", 
                  "namespaces"."membership_lock", 
                  "namespaces"."share_with_group_lock", 
                  "namespaces"."visibility_level", 
                  "namespaces"."request_access_enabled", 
                  "namespaces"."ldap_sync_status", 
                  "namespaces"."ldap_sync_error", 
                  "namespaces"."ldap_sync_last_update_at", 
                  "namespaces"."ldap_sync_last_successful_update_at", 
                  "namespaces"."ldap_sync_last_sync_at", 
                  "namespaces"."description_html", 
                  "namespaces"."lfs_enabled", 
                  "namespaces"."parent_id", 
                  "namespaces"."shared_runners_minutes_limit", 
                  "namespaces"."repository_size_limit", 
                  "namespaces"."require_two_factor_authentication", 
                  "namespaces"."two_factor_grace_period", 
                  "namespaces"."cached_markdown_version", 
                  "namespaces"."project_creation_level", 
                  "namespaces"."runners_token", 
                  "namespaces"."file_template_project_id", 
                  "namespaces"."saml_discovery_token", 
                  "namespaces"."runners_token_encrypted", 
                  "namespaces"."custom_project_templates_group_id", 
                  "namespaces"."auto_devops_enabled", 
                  "namespaces"."extra_shared_runners_minutes_limit", 
                  "namespaces"."last_ci_minutes_notification_at", 
                  "namespaces"."last_ci_minutes_usage_notification_level", 
                  "namespaces"."subgroup_creation_level", 
                  "namespaces"."emails_disabled", 
                  "namespaces"."max_pages_size", 
                  "namespaces"."max_artifacts_size", 
                  "namespaces"."mentions_disabled", 
                  "namespaces"."default_branch_protection", 
                  "namespaces"."unlock_membership_to_ldap", 
                  "namespaces"."max_personal_access_token_lifetime", 
                  "namespaces"."push_rule_id", 
                  "namespaces"."shared_runners_enabled", 
                  "namespaces"."allow_descendants_override_disabled_shared_runners", 
                  "namespaces"."traversal_ids" 
                FROM 
                  (
                    (
                      SELECT 
                        "namespaces"."id", 
                        "namespaces"."name", 
                        "namespaces"."path", 
                        "namespaces"."owner_id", 
                        "namespaces"."created_at", 
                        "namespaces"."updated_at", 
                        "namespaces"."type", 
                        "namespaces"."description", 
                        "namespaces"."avatar", 
                        "namespaces"."membership_lock", 
                        "namespaces"."share_with_group_lock", 
                        "namespaces"."visibility_level", 
                        "namespaces"."request_access_enabled", 
                        "namespaces"."ldap_sync_status", 
                        "namespaces"."ldap_sync_error", 
                        "namespaces"."ldap_sync_last_update_at", 
                        "namespaces"."ldap_sync_last_successful_update_at", 
                        "namespaces"."ldap_sync_last_sync_at", 
                        "namespaces"."description_html", 
                        "namespaces"."lfs_enabled", 
                        "namespaces"."parent_id", 
                        "namespaces"."shared_runners_minutes_limit", 
                        "namespaces"."repository_size_limit", 
                        "namespaces"."require_two_factor_authentication", 
                        "namespaces"."two_factor_grace_period", 
                        "namespaces"."cached_markdown_version", 
                        "namespaces"."project_creation_level", 
                        "namespaces"."runners_token", 
                        "namespaces"."file_template_project_id", 
                        "namespaces"."saml_discovery_token", 
                        "namespaces"."runners_token_encrypted", 
                        "namespaces"."custom_project_templates_group_id", 
                        "namespaces"."auto_devops_enabled", 
                        "namespaces"."extra_shared_runners_minutes_limit", 
                        "namespaces"."last_ci_minutes_notification_at", 
                        "namespaces"."last_ci_minutes_usage_notification_level", 
                        "namespaces"."subgroup_creation_level", 
                        "namespaces"."emails_disabled", 
                        "namespaces"."max_pages_size", 
                        "namespaces"."max_artifacts_size", 
                        "namespaces"."mentions_disabled", 
                        "namespaces"."default_branch_protection", 
                        "namespaces"."unlock_membership_to_ldap", 
                        "namespaces"."max_personal_access_token_lifetime", 
                        "namespaces"."push_rule_id", 
                        "namespaces"."shared_runners_enabled", 
                        "namespaces"."allow_descendants_override_disabled_shared_runners", 
                        "namespaces"."traversal_ids" 
                      FROM 
                        "direct_groups" "namespaces" 
                      WHERE 
                        "namespaces"."type" = 'Group'
                    ) 
                    UNION 
                      (
                        SELECT 
                          "namespaces"."id", 
                          "namespaces"."name", 
                          "namespaces"."path", 
                          "namespaces"."owner_id", 
                          "namespaces"."created_at", 
                          "namespaces"."updated_at", 
                          "namespaces"."type", 
                          "namespaces"."description", 
                          "namespaces"."avatar", 
                          "namespaces"."membership_lock", 
                          "namespaces"."share_with_group_lock", 
                          "namespaces"."visibility_level", 
                          "namespaces"."request_access_enabled", 
                          "namespaces"."ldap_sync_status", 
                          "namespaces"."ldap_sync_error", 
                          "namespaces"."ldap_sync_last_update_at", 
                          "namespaces"."ldap_sync_last_successful_update_at", 
                          "namespaces"."ldap_sync_last_sync_at", 
                          "namespaces"."description_html", 
                          "namespaces"."lfs_enabled", 
                          "namespaces"."parent_id", 
                          "namespaces"."shared_runners_minutes_limit", 
                          "namespaces"."repository_size_limit", 
                          "namespaces"."require_two_factor_authentication", 
                          "namespaces"."two_factor_grace_period", 
                          "namespaces"."cached_markdown_version", 
                          "namespaces"."project_creation_level", 
                          "namespaces"."runners_token", 
                          "namespaces"."file_template_project_id", 
                          "namespaces"."saml_discovery_token", 
                          "namespaces"."runners_token_encrypted", 
                          "namespaces"."custom_project_templates_group_id", 
                          "namespaces"."auto_devops_enabled", 
                          "namespaces"."extra_shared_runners_minutes_limit", 
                          "namespaces"."last_ci_minutes_notification_at", 
                          "namespaces"."last_ci_minutes_usage_notification_level", 
                          "namespaces"."subgroup_creation_level", 
                          "namespaces"."emails_disabled", 
                          "namespaces"."max_pages_size", 
                          "namespaces"."max_artifacts_size", 
                          "namespaces"."mentions_disabled", 
                          "namespaces"."default_branch_protection", 
                          "namespaces"."unlock_membership_to_ldap", 
                          "namespaces"."max_personal_access_token_lifetime", 
                          "namespaces"."push_rule_id", 
                          "namespaces"."shared_runners_enabled", 
                          "namespaces"."allow_descendants_override_disabled_shared_runners", 
                          "namespaces"."traversal_ids" 
                        FROM 
                          "namespaces" 
                          INNER JOIN "group_group_links" ON "group_group_links"."shared_group_id" = "namespaces"."id" 
                        WHERE 
                          "namespaces"."type" = 'Group' 
                          AND "group_group_links"."shared_with_group_id" IN (
                            SELECT 
                              "namespaces"."id" 
                            FROM 
                              "direct_groups" "namespaces" 
                            WHERE 
                              "namespaces"."type" = 'Group'
                          )
                      )
                  ) namespaces 
                WHERE 
                  "namespaces"."type" = 'Group'
              ) 
              UNION 
                (
                  SELECT 
                    "namespaces"."id", 
                    "namespaces"."name", 
                    "namespaces"."path", 
                    "namespaces"."owner_id", 
                    "namespaces"."created_at", 
                    "namespaces"."updated_at", 
                    "namespaces"."type", 
                    "namespaces"."description", 
                    "namespaces"."avatar", 
                    "namespaces"."membership_lock", 
                    "namespaces"."share_with_group_lock", 
                    "namespaces"."visibility_level", 
                    "namespaces"."request_access_enabled", 
                    "namespaces"."ldap_sync_status", 
                    "namespaces"."ldap_sync_error", 
                    "namespaces"."ldap_sync_last_update_at", 
                    "namespaces"."ldap_sync_last_successful_update_at", 
                    "namespaces"."ldap_sync_last_sync_at", 
                    "namespaces"."description_html", 
                    "namespaces"."lfs_enabled", 
                    "namespaces"."parent_id", 
                    "namespaces"."shared_runners_minutes_limit", 
                    "namespaces"."repository_size_limit", 
                    "namespaces"."require_two_factor_authentication", 
                    "namespaces"."two_factor_grace_period", 
                    "namespaces"."cached_markdown_version", 
                    "namespaces"."project_creation_level", 
                    "namespaces"."runners_token", 
                    "namespaces"."file_template_project_id", 
                    "namespaces"."saml_discovery_token", 
                    "namespaces"."runners_token_encrypted", 
                    "namespaces"."custom_project_templates_group_id", 
                    "namespaces"."auto_devops_enabled", 
                    "namespaces"."extra_shared_runners_minutes_limit", 
                    "namespaces"."last_ci_minutes_notification_at", 
                    "namespaces"."last_ci_minutes_usage_notification_level", 
                    "namespaces"."subgroup_creation_level", 
                    "namespaces"."emails_disabled", 
                    "namespaces"."max_pages_size", 
                    "namespaces"."max_artifacts_size", 
                    "namespaces"."mentions_disabled", 
                    "namespaces"."default_branch_protection", 
                    "namespaces"."unlock_membership_to_ldap", 
                    "namespaces"."max_personal_access_token_lifetime", 
                    "namespaces"."push_rule_id", 
                    "namespaces"."shared_runners_enabled", 
                    "namespaces"."allow_descendants_override_disabled_shared_runners", 
                    "namespaces"."traversal_ids" 
                  FROM 
                    "namespaces" 
                    INNER JOIN "members" ON "namespaces"."id" = "members"."source_id" 
                  WHERE 
                    "members"."type" = 'GroupMember' 
                    AND "members"."source_type" = 'Namespace' 
                    AND "namespaces"."type" = 'Group' 
                    AND "members"."user_id" = 4906322 
                    AND "members"."access_level" = 5
                )
            ) namespaces 
          WHERE 
            "namespaces"."type" = 'Group'
        ) authorized 
      WHERE 
        authorized."id" = "namespaces"."id"
    )
  ) 
  AND (
    1 = 0 
    OR "namespaces"."path" = 'gitlab-org/security-products'
  )

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Doug Stull

Merge request reports