Commit 2099aa38 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge pull request #7131 from skv-headless/per_request_rules_caching

per request project rules caching
parents c50f8951 8ec02ed9
...@@ -173,6 +173,7 @@ gem "font-awesome-rails", '~> 3.2' ...@@ -173,6 +173,7 @@ gem "font-awesome-rails", '~> 3.2'
gem "gitlab_emoji", "~> 0.0.1.1" gem "gitlab_emoji", "~> 0.0.1.1"
gem "gon", '~> 5.0.0' gem "gon", '~> 5.0.0'
gem 'nprogress-rails' gem 'nprogress-rails'
gem 'request_store'
group :development do group :development do
gem "annotate", "~> 2.6.0.beta2" gem "annotate", "~> 2.6.0.beta2"
......
...@@ -409,6 +409,7 @@ GEM ...@@ -409,6 +409,7 @@ GEM
redis-store (1.1.4) redis-store (1.1.4)
redis (>= 2.2) redis (>= 2.2)
ref (1.0.5) ref (1.0.5)
request_store (1.0.5)
require_all (1.3.2) require_all (1.3.2)
rest-client (1.6.7) rest-client (1.6.7)
mime-types (>= 1.16) mime-types (>= 1.16)
...@@ -647,6 +648,7 @@ DEPENDENCIES ...@@ -647,6 +648,7 @@ DEPENDENCIES
rb-inotify rb-inotify
redcarpet (~> 2.2.2) redcarpet (~> 2.2.2)
redis-rails redis-rails
request_store
rspec-rails rspec-rails
sanitize (~> 2.0) sanitize (~> 2.0)
sass-rails (~> 4.0.2) sass-rails (~> 4.0.2)
......
...@@ -67,40 +67,42 @@ class Ability ...@@ -67,40 +67,42 @@ class Ability
def project_abilities(user, project) def project_abilities(user, project)
rules = [] rules = []
key = "/user/#{user.id}/project/#{project.id}"
RequestStore.store[key] ||= begin
team = project.team
team = project.team # Rules based on role in project
if team.master?(user)
rules += project_master_rules
# Rules based on role in project elsif team.developer?(user)
if team.master?(user) rules += project_dev_rules
rules += project_master_rules
elsif team.developer?(user) elsif team.reporter?(user)
rules += project_dev_rules rules += project_report_rules
elsif team.reporter?(user) elsif team.guest?(user)
rules += project_report_rules rules += project_guest_rules
end
elsif team.guest?(user) if project.public? || project.internal?
rules += project_guest_rules rules += public_project_rules
end end
if project.public? || project.internal? if project.owner == user || user.admin?
rules += public_project_rules rules += project_admin_rules
end end
if project.owner == user || user.admin? if project.group && project.group.has_owner?(user)
rules += project_admin_rules rules += project_admin_rules
end end
if project.group && project.group.has_owner?(user) if project.archived?
rules += project_admin_rules rules -= project_archived_rules
end end
if project.archived? rules
rules -= project_archived_rules
end end
rules
end end
def public_project_rules def public_project_rules
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment