diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2014-07-14 14:58:53 +0400 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2014-07-14 14:58:53 +0400 |
commit | 2099aa38b661f7ceacb1346c1199b9dd89c7dec0 (patch) | |
tree | 6d019c911589fb1090a32052050a99d22b7ecc6f /app/models/ability.rb | |
parent | c50f89519660a7da6e9c7978118a29a7a45178c6 (diff) | |
parent | 8ec02ed9aa36160bd19155cef1f71ca7e12ad4f3 (diff) |
Merge pull request #7131 from skv-headless/per_request_rules_caching
per request project rules caching
Diffstat (limited to 'app/models/ability.rb')
-rw-r--r-- | app/models/ability.rb | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/app/models/ability.rb b/app/models/ability.rb index 234578b5e18..d33ca41118a 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -67,40 +67,42 @@ class Ability def project_abilities(user, project) 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 - if team.master?(user) - rules += project_master_rules + elsif team.developer?(user) + rules += project_dev_rules - elsif team.developer?(user) - rules += project_dev_rules + elsif team.reporter?(user) + rules += project_report_rules - elsif team.reporter?(user) - rules += project_report_rules + elsif team.guest?(user) + rules += project_guest_rules + end - elsif team.guest?(user) - rules += project_guest_rules - end + if project.public? || project.internal? + rules += public_project_rules + end - if project.public? || project.internal? - rules += public_project_rules - end + if project.owner == user || user.admin? + rules += project_admin_rules + end - if project.owner == user || user.admin? - rules += project_admin_rules - end + if project.group && project.group.has_owner?(user) + rules += project_admin_rules + end - if project.group && project.group.has_owner?(user) - rules += project_admin_rules - end + if project.archived? + rules -= project_archived_rules + end - if project.archived? - rules -= project_archived_rules + rules end - - rules end def public_project_rules |