e805a64700
!581 has a lot of changes that would cause merge conflicts if not properly backported to CE. This commit/MR serves as a better foundation for gitlab-org/gitlab-ee!581. = Changes = 1. Move from `has_one {merge,push}_access_level` to `has_many`, with the `length` of the association limited to `1`. This is _effectively_ a `has_one` association, but should cause less conflicts with EE, which is set to `has_many`. This has a number of related changes in the views, specs, and factories. 2. Make `gon` variable loading more consistent (with EE!581) in the `ProtectedBranchesController`. Also use `::` to prefix the `ProtectedBranches` services, because this is required in EE. 3. Extract a `ProtectedBranchAccess` concern from the two access level models. This concern only has a single `humanize` method here, but will have more methods in EE. 4. Add `form_errors` to the protected branches creation form. This is not strictly required for EE compatibility, but was an oversight nonetheless.
25 lines
844 B
Ruby
25 lines
844 B
Ruby
class ProtectedBranch::PushAccessLevel < ActiveRecord::Base
|
|
include ProtectedBranchAccess
|
|
|
|
belongs_to :protected_branch
|
|
delegate :project, to: :protected_branch
|
|
|
|
validates :access_level, presence: true, inclusion: { in: [Gitlab::Access::MASTER,
|
|
Gitlab::Access::DEVELOPER,
|
|
Gitlab::Access::NO_ACCESS] }
|
|
|
|
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 false if access_level == Gitlab::Access::NO_ACCESS
|
|
return true if user.is_admin?
|
|
|
|
project.team.max_member_access(user.id) >= access_level
|
|
end
|
|
end
|