diff options
Diffstat (limited to 'app/models/concerns/protected_branch_access.rb')
-rw-r--r-- | app/models/concerns/protected_branch_access.rb | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/app/models/concerns/protected_branch_access.rb b/app/models/concerns/protected_branch_access.rb index 9dd4d9c6f24..a40148a4394 100644 --- a/app/models/concerns/protected_branch_access.rb +++ b/app/models/concerns/protected_branch_access.rb @@ -2,20 +2,32 @@ module ProtectedBranchAccess extend ActiveSupport::Concern included do + include ProtectedRefAccess + belongs_to :protected_branch + delegate :project, to: :protected_branch - scope :master, -> { where(access_level: Gitlab::Access::MASTER) } - scope :developer, -> { where(access_level: Gitlab::Access::DEVELOPER) } - end + validates :access_level, presence: true, inclusion: { + in: [ + Gitlab::Access::MASTER, + Gitlab::Access::DEVELOPER, + Gitlab::Access::NO_ACCESS + ] + } - def humanize - self.class.human_access_levels[self.access_level] - end + def self.human_access_levels + { + Gitlab::Access::MASTER => "Masters", + Gitlab::Access::DEVELOPER => "Developers + Masters", + Gitlab::Access::NO_ACCESS => "No one" + }.with_indifferent_access + end - def check_access(user) - return true if user.is_admin? + def check_access(user) + return false if access_level == Gitlab::Access::NO_ACCESS - project.team.max_member_access(user.id) >= access_level + super + end end end |