Skip to content

Remove ultimate trial banner for non-group owning users

What does this MR do?

Remove ultimate trial banner for users that are not already a group admin

Related to #327043

Screenshots

Current After
screenshot-2021-05-06-13-40-07 The banner and the top right user menu item aren't shown unless the user owns a group

Queries

Before

We remove one of the union queries (for namespaces). So we have a better query plan.

  • I have used both queries warm, because they interfere
  • Also the result for the top menu is cached.

https://explain.depesz.com/s/K6Zq

explain SELECT 1 AS one FROM ((SELECT "namespaces"."id" FROM "namespaces" WHERE "namespaces"."type" IS NULL AND "namespaces"."owner_id" = 4409816)
UNION
(SELECT "namespaces"."id" 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" = 4409816 AND "members"."requested_at" IS NULL AND (access_level >= 10) AND "members"."access_level" IN (20, 30, 40, 50) AND "namespaces"."parent_id" IS NULL)) namespaces LEFT OUTER JOIN "gitlab_subscriptions" ON "gitlab_subscriptions"."namespace_id" = "namespaces"."id" WHERE "gitlab_subscriptions"."trial_ends_on" IS NULL LIMIT 1

After

https://explain.depesz.com/s/qv1H


SELECT 1 AS one
FROM "namespaces"
INNER JOIN "members" ON "namespaces"."id" = "members"."source_id"
LEFT OUTER JOIN "gitlab_subscriptions" ON "gitlab_subscriptions"."namespace_id" = "namespaces"."id"
WHERE "members"."type" = 'GroupMember'
  AND "members"."source_type" = 'Namespace'
  AND "namespaces"."type" = 'Group'
  AND "members"."user_id" = 4409816
  AND "members"."requested_at" IS NULL
  AND (access_level >= 10)
  AND "members"."access_level" = 50
  AND "namespaces"."parent_id" IS NULL
  AND "gitlab_subscriptions"."trial_ends_on" IS NULL
LIMIT 1

Older query union

https://explain.depesz.com/s/tSKZ

SELECT 1 AS one
FROM (
        (SELECT "namespaces"."id"
         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" = 4409816
           AND "members"."requested_at" IS NULL
           AND (access_level >= 10)
           AND "members"."access_level" = 50
           AND "namespaces"."parent_id" IS NULL)) namespaces
LEFT OUTER JOIN "gitlab_subscriptions" ON "gitlab_subscriptions"."namespace_id" = "namespaces"."id"
WHERE "gitlab_subscriptions"."trial_ends_on" IS NULL
LIMIT 1

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

Security

If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:

  • Label as security and @ mention @gitlab-com/gl-security/appsec
  • The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
  • Security reports checked/validated by a reviewer from the AppSec team
Edited by Alper Akgun

Merge request reports