diff options
author | Rémy Coutable <remy@rymai.me> | 2016-07-28 20:28:56 +0300 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2016-09-22 12:12:17 +0300 |
commit | 6b02127f03b1f8e1dbbecccfc2ba16e62aadcbed (patch) | |
tree | 203e8df9de809ffcc5a8d31c76885ecd0d088ab2 /app | |
parent | 98b3d6ce695a9751f72adc35bc09f82eb2f624a4 (diff) |
New Members::RequestAccessService
Signed-off-by: Rémy Coutable <remy@rymai.me>
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/concerns/membership_actions.rb | 2 | ||||
-rw-r--r-- | app/models/concerns/access_requestable.rb | 16 | ||||
-rw-r--r-- | app/models/group.rb | 5 | ||||
-rw-r--r-- | app/models/project.rb | 5 | ||||
-rw-r--r-- | app/services/members/request_access_service.rb | 25 |
5 files changed, 34 insertions, 19 deletions
diff --git a/app/controllers/concerns/membership_actions.rb b/app/controllers/concerns/membership_actions.rb index 52682ef9dc9..1d34441e8ea 100644 --- a/app/controllers/concerns/membership_actions.rb +++ b/app/controllers/concerns/membership_actions.rb @@ -3,7 +3,7 @@ module MembershipActions include MembersHelper def request_access - membershipable.request_access(current_user) + Members::RequestAccessService.new(membershipable, current_user).execute redirect_to polymorphic_path(membershipable), notice: 'Your request for access has been queued for review.' diff --git a/app/models/concerns/access_requestable.rb b/app/models/concerns/access_requestable.rb deleted file mode 100644 index eedd32a729f..00000000000 --- a/app/models/concerns/access_requestable.rb +++ /dev/null @@ -1,16 +0,0 @@ -# == AccessRequestable concern -# -# Contains functionality related to objects that can receive request for access. -# -# Used by Project, and Group. -# -module AccessRequestable - extend ActiveSupport::Concern - - def request_access(user) - members.create( - access_level: Gitlab::Access::DEVELOPER, - user: user, - requested_at: Time.now.utc) - end -end diff --git a/app/models/group.rb b/app/models/group.rb index aefb94b2ada..1f610aef87a 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -3,7 +3,6 @@ require 'carrierwave/orm/activerecord' class Group < Namespace include Gitlab::ConfigHelper include Gitlab::VisibilityLevel - include AccessRequestable include Referable has_many :group_members, -> { where(requested_at: nil) }, dependent: :destroy, as: :source, class_name: 'GroupMember' @@ -102,6 +101,10 @@ class Group < Namespace self[:lfs_enabled] end + def request_access(user) + Members::RequestAccessService.new(self, user).execute + end + def add_users(user_ids, access_level, current_user: nil, expires_at: nil) user_ids.each do |user_id| Member.add_user( diff --git a/app/models/project.rb b/app/models/project.rb index 7265cb55594..cebf6199974 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -5,7 +5,6 @@ class Project < ActiveRecord::Base include Gitlab::ShellAdapter include Gitlab::VisibilityLevel include Gitlab::CurrentSettings - include AccessRequestable include Referable include Sortable include AfterCommitQueue @@ -1012,6 +1011,10 @@ class Project < ActiveRecord::Base update_all(updated_at: Time.now) end + def request_access(user) + Members::RequestAccessService.new(self, user).execute + end + def project_member(user) project_members.find_by(user_id: user) end diff --git a/app/services/members/request_access_service.rb b/app/services/members/request_access_service.rb new file mode 100644 index 00000000000..5c0d2d83445 --- /dev/null +++ b/app/services/members/request_access_service.rb @@ -0,0 +1,25 @@ +module Members + class RequestAccessService < BaseService + attr_accessor :source + + def initialize(source, current_user) + @source = source + @current_user = current_user + end + + def execute + raise Gitlab::Access::AccessDeniedError if cannot_request_access?(source) + + source.members.create( + access_level: Gitlab::Access::DEVELOPER, + user: current_user, + requested_at: Time.now.utc) + end + + private + + def cannot_request_access?(source) + !source || !can?(current_user, :request_access, source) + end + end +end |