Project

General



Profile

« Previous | Next » 

Revision 1815

Adds a permission 'view wiki edits' so that wiki history can be hidden to certain users (#1154).
A migration automatically adds this permission to roles that were allowed to view wiki pages.

View differences:

trunk/app/controllers/wiki_controller.rb
38 38
      end
39 39
      return
40 40
    end
41
    if params[:version] && !User.current.allowed_to?(:view_wiki_edits, @project)
42
      # Redirects user to the current version if he's not allowed to view previous versions
43
      redirect_to :version => nil
44
      return
45
    end
41 46
    @content = @page.content_for_version(params[:version])
42 47
    if params[:export] == 'html'
43 48
      export = render_to_string :action => 'export', :layout => false
trunk/app/models/role.rb
76 76
    save!
77 77
  end
78 78
  
79
  # Returns true if the role has the given permission
80
  def has_permission?(perm)
81
    !permissions.nil? && permissions.include?(perm.to_sym)
82
  end
83
  
79 84
  def <=>(role)
80 85
    position <=> role.position
81 86
  end
trunk/app/models/wiki_content.rb
35 35
                  :type => 'wiki-page',
36 36
                  :url => Proc.new {|o| {:controller => 'wiki', :id => o.page.wiki.project_id, :page => o.page.title, :version => o.version}}
37 37

  
38
    acts_as_activity_provider :type => 'wiki_pages',
38
    acts_as_activity_provider :type => 'wiki_edits',
39 39
                              :timestamp => "#{WikiContent.versioned_table_name}.updated_on",
40
                              :permission => :view_wiki_pages,
40
                              :permission => :view_wiki_edits,
41 41
                              :find_options => {:select => "#{WikiContent.versioned_table_name}.updated_on, #{WikiContent.versioned_table_name}.comments, " +
42 42
                                                           "#{WikiContent.versioned_table_name}.#{WikiContent.version_column}, #{WikiPage.table_name}.title, " +
43 43
                                                           "#{WikiContent.versioned_table_name}.page_id, #{WikiContent.versioned_table_name}.author_id, " +
trunk/app/views/wiki/show.rhtml
7 7
<%= link_to_if_authorized(l(:button_delete), {:action => 'destroy', :page => @page.title}, :method => :post, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %>
8 8
<%= link_to_if_authorized(l(:button_rollback), {:action => 'edit', :page => @page.title, :version => @content.version }, :class => 'icon icon-cancel') if @content.version < @page.content.version %>
9 9
<% end %>
10
<%= link_to(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %>
10
<%= link_to_if_authorized(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %>
11 11
</div>
12 12

  
13 13
<%= breadcrumb(@page.ancestors.reverse.collect {|parent| link_to h(parent.pretty_title), {:page => parent.title}}) %>
trunk/db/migrate/097_add_wiew_wiki_edits_permission.rb
1
class AddWiewWikiEditsPermission < ActiveRecord::Migration
2
  def self.up
3
	Role.find(:all).each do |r|
4
	  r.add_permission!(:view_wiki_edits) if r.has_permission?(:view_wiki_pages)
5
  	end
6
  end
7

  
8
  def self.down
9
	Role.find(:all).each do |r|
10
	  r.remove_permission!(:view_wiki_edits)
11
  	end
12
  end
13
end
0 14

  
trunk/lib/redmine.rb
79 79
    map.permission :manage_wiki, {:wikis => [:edit, :destroy]}, :require => :member
80 80
    map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member
81 81
    map.permission :delete_wiki_pages, {:wiki => :destroy}, :require => :member
82
    map.permission :view_wiki_pages, :wiki => [:index, :history, :diff, :annotate, :special]
82
    map.permission :view_wiki_pages, :wiki => [:index, :special]
83
    map.permission :view_wiki_edits, :wiki => [:history, :diff, :annotate]
83 84
    map.permission :edit_wiki_pages, :wiki => [:edit, :preview, :add_attachment, :destroy_attachment]
84 85
    map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member
85 86
  end
......
145 146
  activity.register :news
146 147
  activity.register :documents, :class_name => %w(Document Attachment)
147 148
  activity.register :files, :class_name => 'Attachment'
148
  activity.register :wiki_pages, :class_name => 'WikiContent::Version', :default => false
149
  activity.register :wiki_edits, :class_name => 'WikiContent::Version', :default => false
149 150
  activity.register :messages, :default => false
150 151
end
trunk/test/fixtures/roles.yml
30 30
    - :view_documents
31 31
    - :manage_documents
32 32
    - :view_wiki_pages
33
    - :view_wiki_edits
33 34
    - :edit_wiki_pages
34 35
    - :protect_wiki_pages
35 36
    - :delete_wiki_pages
......
72 73
    - :view_documents
73 74
    - :manage_documents
74 75
    - :view_wiki_pages
76
    - :view_wiki_edits
75 77
    - :edit_wiki_pages
76 78
    - :protect_wiki_pages
77 79
    - :delete_wiki_pages
......
109 111
    - :view_documents
110 112
    - :manage_documents
111 113
    - :view_wiki_pages
114
    - :view_wiki_edits
112 115
    - :edit_wiki_pages
113 116
    - :delete_wiki_pages
114 117
    - :add_messages
......
139 142
    - :view_documents
140 143
    - :manage_documents
141 144
    - :view_wiki_pages
145
    - :view_wiki_edits
142 146
    - :edit_wiki_pages
143 147
    - :add_messages
144 148
    - :view_files
......
159 163
    - :view_time_entries
160 164
    - :view_documents
161 165
    - :view_wiki_pages
166
    - :view_wiki_edits
162 167
    - :view_files
163 168
    - :browse_repository
164 169
    - :view_changesets

Also available in: Unified diff