2019-02-15 15:39:39 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-08-17 22:00:37 +05:30
|
|
|
module Gitlab
|
|
|
|
module CycleAnalytics
|
|
|
|
class Permissions
|
|
|
|
STAGE_PERMISSIONS = {
|
|
|
|
issue: :read_issue,
|
|
|
|
code: :read_merge_request,
|
|
|
|
test: :read_build,
|
|
|
|
review: :read_merge_request,
|
|
|
|
staging: :read_build,
|
2017-09-10 17:25:29 +05:30
|
|
|
production: :read_issue
|
2017-08-17 22:00:37 +05:30
|
|
|
}.freeze
|
|
|
|
|
|
|
|
def self.get(*args)
|
|
|
|
new(*args).get
|
|
|
|
end
|
|
|
|
|
|
|
|
def initialize(user:, project:)
|
|
|
|
@user = user
|
|
|
|
@project = project
|
|
|
|
@stage_permission_hash = {}
|
|
|
|
end
|
|
|
|
|
|
|
|
def get
|
2019-10-12 21:52:04 +05:30
|
|
|
::CycleAnalytics::LevelBase::STAGES.each do |stage|
|
2017-08-17 22:00:37 +05:30
|
|
|
@stage_permission_hash[stage] = authorized_stage?(stage)
|
|
|
|
end
|
|
|
|
|
|
|
|
@stage_permission_hash
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def authorized_stage?(stage)
|
|
|
|
return false unless authorize_project(:read_cycle_analytics)
|
|
|
|
|
|
|
|
STAGE_PERMISSIONS[stage] ? authorize_project(STAGE_PERMISSIONS[stage]) : true
|
|
|
|
end
|
|
|
|
|
|
|
|
def authorize_project(permission)
|
|
|
|
Ability.allowed?(@user, permission, @project)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|