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/services/members | |
parent | 98b3d6ce695a9751f72adc35bc09f82eb2f624a4 (diff) |
New Members::RequestAccessService
Signed-off-by: Rémy Coutable <remy@rymai.me>
Diffstat (limited to 'app/services/members')
-rw-r--r-- | app/services/members/request_access_service.rb | 25 |
1 files changed, 25 insertions, 0 deletions
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 |