summaryrefslogtreecommitdiff
path: root/app/models/user.rb
diff options
context:
space:
mode:
authorValery Sizov <vsv2711@gmail.com>2015-03-31 18:20:19 +0300
committerValery Sizov <vsv2711@gmail.com>2015-04-07 17:27:48 +0300
commit225972f14a8b9433a82cdb20b3ab9814503f8338 (patch)
tree6c99927dfa9c54179af1ce23ebcb6cd28710877d /app/models/user.rb
parent5b9184dbf422085052ea7073b375ca2a944e546f (diff)
downloadgitlab-ci-225972f14a8b9433a82cdb20b3ab9814503f8338.tar.gz
developers can cancel and retry jobdevelopers_can_cancel_job
Diffstat (limited to 'app/models/user.rb')
-rw-r--r--app/models/user.rb35
1 files changed, 30 insertions, 5 deletions
diff --git a/app/models/user.rb b/app/models/user.rb
index 6c16035..129ddc1 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1,5 +1,7 @@
# User object is stored in session
class User
+ DEVELOPER_ACCESS = 30
+
attr_reader :attributes
def initialize(hash)
@@ -33,12 +35,23 @@ class User
end
def can_access_project?(project_gitlab_id)
- opts = {
- private_token: self.private_token,
- }
+ !!project_info(project_gitlab_id)
+ end
+
+ # Indicate if user has developer access or higher
+ def has_developer_access?(project_gitlab_id)
+ data = project_info(project_gitlab_id)
+
+ return false unless data && data["permissions"]
+
+ permissions = data["permissions"]
+
+ if permissions["project_access"] && permissions["project_access"]["access_level"] >= DEVELOPER_ACCESS
+ return true
+ end
- Rails.cache.fetch(cache_key(project_gitlab_id, sync_at)) do
- !!Network.new.project(self.url, opts, project_gitlab_id)
+ if permissions["group_access"] && permissions["group_access"]["access_level"] >= DEVELOPER_ACCESS
+ return true
end
end
@@ -51,4 +64,16 @@ class User
!!Network.new.project_hooks(self.url, opts, project_gitlab_id)
end
end
+
+ private
+
+ def project_info(project_gitlab_id)
+ opts = {
+ private_token: self.private_token,
+ }
+
+ Rails.cache.fetch(cache_key("project_info", project_gitlab_id, sync_at)) do
+ Network.new.project(self.url, opts, project_gitlab_id)
+ end
+ end
end