Commit 49d58492f210faa11bbd4125ffd6b241356da827
1 parent
bdc42488
Exists in
master
and in
4 other branches
Wiki abilities
Showing
3 changed files
with
41 additions
and
17 deletions
Show diff stats
app/controllers/wikis_controller.rb
1 | 1 | class WikisController < ApplicationController |
2 | 2 | before_filter :project |
3 | 3 | before_filter :add_project_abilities |
4 | + before_filter :authorize_read_wiki! | |
5 | + before_filter :authorize_write_wiki!, :except => [:show, :destroy] | |
6 | + before_filter :authorize_admin_wiki!, :only => :destroy | |
4 | 7 | layout "project" |
5 | 8 | |
6 | 9 | def show |
... | ... | @@ -48,4 +51,18 @@ class WikisController < ApplicationController |
48 | 51 | format.html { redirect_to project_wiki_path(@project, :index), notice: "Page was successfully deleted" } |
49 | 52 | end |
50 | 53 | end |
54 | + | |
55 | + protected | |
56 | + | |
57 | + def authorize_read_wiki! | |
58 | + can?(current_user, :read_wiki, @project) | |
59 | + end | |
60 | + | |
61 | + def authorize_write_wiki! | |
62 | + can?(current_user, :write_wiki, @project) | |
63 | + end | |
64 | + | |
65 | + def authorize_admin_wiki! | |
66 | + can?(current_user, :admin_wiki, @project) | |
67 | + end | |
51 | 68 | end | ... | ... |
app/models/ability.rb
... | ... | @@ -15,21 +15,26 @@ class Ability |
15 | 15 | |
16 | 16 | rules << [ |
17 | 17 | :read_project, |
18 | + :read_wiki, | |
18 | 19 | :read_issue, |
19 | 20 | :read_snippet, |
20 | 21 | :read_team_member, |
21 | 22 | :read_merge_request, |
22 | - :read_note | |
23 | - ] if project.allow_read_for?(user) | |
24 | - | |
25 | - rules << [ | |
23 | + :read_note, | |
26 | 24 | :write_project, |
27 | 25 | :write_issue, |
28 | 26 | :write_snippet, |
29 | 27 | :write_merge_request, |
30 | - :write_note, | |
28 | + :write_note | |
29 | + ] if project.guest_access_for?(user) | |
30 | + | |
31 | + rules << [ | |
32 | + :download_code, | |
33 | + ] if project.report_access_for?(user) | |
34 | + | |
35 | + rules << [ | |
31 | 36 | :write_wiki |
32 | - ] if project.allow_write_for?(user) | |
37 | + ] if project.dev_access_for?(user) | |
33 | 38 | |
34 | 39 | rules << [ |
35 | 40 | :modify_issue, |
... | ... | @@ -40,18 +45,16 @@ class Ability |
40 | 45 | :admin_snippet, |
41 | 46 | :admin_team_member, |
42 | 47 | :admin_merge_request, |
43 | - :admin_note | |
44 | - ] if project.allow_admin_for?(user) | |
48 | + :admin_note, | |
49 | + :admin_wiki | |
50 | + ] if project.master_access_for?(user) | |
45 | 51 | |
46 | - rules << [ | |
47 | - :download_code, | |
48 | - ] if project.allow_pull_for?(user) | |
49 | 52 | |
50 | 53 | rules.flatten |
51 | 54 | end |
52 | 55 | |
53 | 56 | class << self |
54 | - [:issue, :note, :snippet, :merge_request, :wiki].each do |name| | |
57 | + [:issue, :note, :snippet, :merge_request].each do |name| | |
55 | 58 | define_method "#{name}_abilities" do |user, subject| |
56 | 59 | if subject.author == user |
57 | 60 | [ | ... | ... |
app/models/project.rb
... | ... | @@ -233,16 +233,20 @@ class Project < ActiveRecord::Base |
233 | 233 | !users_projects.where(:user_id => user.id).empty? |
234 | 234 | end |
235 | 235 | |
236 | - def allow_write_for?(user) | |
236 | + def guest_access_for?(user) | |
237 | 237 | !users_projects.where(:user_id => user.id).empty? |
238 | 238 | end |
239 | 239 | |
240 | - def allow_admin_for?(user) | |
241 | - !users_projects.where(:user_id => user.id, :project_access => [UsersProject::MASTER]).empty? || owner_id == user.id | |
240 | + def report_access_for?(user) | |
241 | + !users_projects.where(:user_id => user.id, :project_access => [UsersProject::REPORTER, UsersProject::DEVELOPER, UsersProject::MASTER]).empty? | |
242 | 242 | end |
243 | 243 | |
244 | - def allow_pull_for?(user) | |
245 | - !users_projects.where(:user_id => user.id, :project_access => [UsersProject::REPORTER, UsersProject::DEVELOPER, UsersProject::MASTER]).empty? | |
244 | + def dev_access_for?(user) | |
245 | + !users_projects.where(:user_id => user.id, :project_access => [UsersProject::DEVELOPER, UsersProject::MASTER]).empty? | |
246 | + end | |
247 | + | |
248 | + def master_access_for?(user) | |
249 | + !users_projects.where(:user_id => user.id, :project_access => [UsersProject::MASTER]).empty? || owner_id == user.id | |
246 | 250 | end |
247 | 251 | |
248 | 252 | def root_ref | ... | ... |