Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-04-07 18:15:13 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-04-07 18:15:13 +0300
commita55ff7975e6c763e10127d22df4ba9c32ee2838f (patch)
treed9f57b7a6412ff2833c7a1a8671b3ba47d1179f2 /lib/gitlab/auth.rb
parent4d5e790175cbd85f4b5bb0a9996efde10a9cad65 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/auth.rb')
-rw-r--r--lib/gitlab/auth.rb47
1 files changed, 37 insertions, 10 deletions
diff --git a/lib/gitlab/auth.rb b/lib/gitlab/auth.rb
index 3511d7f57e8..9268fdd8519 100644
--- a/lib/gitlab/auth.rb
+++ b/lib/gitlab/auth.rb
@@ -29,6 +29,12 @@ module Gitlab
WRITE_REGISTRY_SCOPE = :write_registry
REGISTRY_SCOPES = [READ_REGISTRY_SCOPE, WRITE_REGISTRY_SCOPE].freeze
+ # Scopes used for GitLab Observability access which is outside of the GitLab app itself.
+ # Hence the lack of ability mapping in `abilities_for_scopes`.
+ READ_OBSERVABILITY_SCOPE = :read_observability
+ WRITE_OBSERVABILITY_SCOPE = :write_observability
+ OBSERVABILITY_SCOPES = [READ_OBSERVABILITY_SCOPE, WRITE_OBSERVABILITY_SCOPE].freeze
+
# Scopes used for GitLab as admin
SUDO_SCOPE = :sudo
ADMIN_MODE_SCOPE = :admin_mode
@@ -364,14 +370,8 @@ module Gitlab
]
end
- def available_scopes_for(current_user)
- scopes = non_admin_available_scopes
-
- if current_user.admin? # rubocop: disable Cop/UserAdmin
- scopes += Feature.enabled?(:admin_mode_for_api) ? ADMIN_SCOPES : [SUDO_SCOPE]
- end
-
- scopes
+ def available_scopes_for(resource)
+ available_scopes_for_resource(resource) - unavailable_scopes_for_resource(resource)
end
def all_available_scopes
@@ -390,13 +390,40 @@ module Gitlab
end
def resource_bot_scopes
- Gitlab::Auth::API_SCOPES + Gitlab::Auth::REPOSITORY_SCOPES + Gitlab::Auth.registry_scopes - [:read_user]
+ non_admin_available_scopes - [READ_USER_SCOPE]
end
private
+ def available_scopes_for_resource(resource)
+ case resource
+ when User
+ scopes = non_admin_available_scopes
+
+ if resource.admin? # rubocop: disable Cop/UserAdmin
+ scopes += Feature.enabled?(:admin_mode_for_api) ? ADMIN_SCOPES : [SUDO_SCOPE]
+ end
+
+ scopes
+ when Project, Group
+ resource_bot_scopes
+ else
+ []
+ end
+ end
+
+ def unavailable_scopes_for_resource(resource)
+ unavailable_observability_scopes_for_resource(resource)
+ end
+
+ def unavailable_observability_scopes_for_resource(resource)
+ return [] if resource.is_a?(Group) && Gitlab::Observability.enabled?(resource)
+
+ OBSERVABILITY_SCOPES
+ end
+
def non_admin_available_scopes
- API_SCOPES + REPOSITORY_SCOPES + registry_scopes
+ API_SCOPES + REPOSITORY_SCOPES + registry_scopes + OBSERVABILITY_SCOPES
end
def find_build_by_token(token)