]> source.dussan.org Git - redmine.git/commitdiff
r18551@gaspard (orig r1815): jplang | 2008-09-13 18:45:01 +0200
authorNicolas Chuche <nicolas.chuche@barna.be>
Sun, 14 Sep 2008 15:35:10 +0000 (15:35 +0000)
committerNicolas Chuche <nicolas.chuche@barna.be>
Sun, 14 Sep 2008 15:35:10 +0000 (15:35 +0000)
 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.

git-svn-id: http://redmine.rubyforge.org/svn/branches/nbc@1844 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/wiki_controller.rb
app/models/role.rb
app/models/wiki_content.rb
app/views/wiki/show.rhtml
db/migrate/097_add_wiew_wiki_edits_permission.rb [new file with mode: 0644]
lib/redmine.rb
test/fixtures/roles.yml

index 46df2931e4905f59d0235c1da8d5cc556bca80bc..5c8158db813f44b009bb2599ce1a167571e9c9d6 100644 (file)
@@ -38,6 +38,11 @@ class WikiController < ApplicationController
       end
       return
     end
+    if params[:version] && !User.current.allowed_to?(:view_wiki_edits, @project)
+      # Redirects user to the current version if he's not allowed to view previous versions
+      redirect_to :version => nil
+      return
+    end
     @content = @page.content_for_version(params[:version])
     if params[:export] == 'html'
       export = render_to_string :action => 'export', :layout => false
index 5ff9470f91f2348f71f8f2b72b78905a7ec6e400..beb13c03b5a3b7203879e428272b6543c52ea7e5 100644 (file)
@@ -76,6 +76,11 @@ class Role < ActiveRecord::Base
     save!
   end
   
+  # Returns true if the role has the given permission
+  def has_permission?(perm)
+    !permissions.nil? && permissions.include?(perm.to_sym)
+  end
+  
   def <=>(role)
     position <=> role.position
   end
index f2ee39c4dae5b099a102f8480d5f53935b6a900a..4a4c5c270ea3a582bd3e9fa5fdd78777a6a7f774 100644 (file)
@@ -35,9 +35,9 @@ class WikiContent < ActiveRecord::Base
                   :type => 'wiki-page',
                   :url => Proc.new {|o| {:controller => 'wiki', :id => o.page.wiki.project_id, :page => o.page.title, :version => o.version}}
 
-    acts_as_activity_provider :type => 'wiki_pages',
+    acts_as_activity_provider :type => 'wiki_edits',
                               :timestamp => "#{WikiContent.versioned_table_name}.updated_on",
-                              :permission => :view_wiki_pages,
+                              :permission => :view_wiki_edits,
                               :find_options => {:select => "#{WikiContent.versioned_table_name}.updated_on, #{WikiContent.versioned_table_name}.comments, " +
                                                            "#{WikiContent.versioned_table_name}.#{WikiContent.version_column}, #{WikiPage.table_name}.title, " +
                                                            "#{WikiContent.versioned_table_name}.page_id, #{WikiContent.versioned_table_name}.author_id, " +
index 255b904f5669ed2e07ae3f2b275574c376b30158..844c6c0f84064d3d1a0a97a68976d00ae3fd8565 100644 (file)
@@ -7,7 +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') %>
 <%= 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 %>
 <% end %>
-<%= link_to(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %>
+<%= link_to_if_authorized(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %>
 </div>
 
 <%= breadcrumb(@page.ancestors.reverse.collect {|parent| link_to h(parent.pretty_title), {:page => parent.title}}) %>
diff --git a/db/migrate/097_add_wiew_wiki_edits_permission.rb b/db/migrate/097_add_wiew_wiki_edits_permission.rb
new file mode 100644 (file)
index 0000000..0f87ada
--- /dev/null
@@ -0,0 +1,13 @@
+class AddWiewWikiEditsPermission < ActiveRecord::Migration
+  def self.up
+       Role.find(:all).each do |r|
+         r.add_permission!(:view_wiki_edits) if r.has_permission?(:view_wiki_pages)
+       end
+  end
+
+  def self.down
+       Role.find(:all).each do |r|
+         r.remove_permission!(:view_wiki_edits)
+       end
+  end
+end
index fdacb23b90f36abe215e2dc3882d06cfcd497ad3..5529e0bf5ef230ec8972e5dad23af22c3c0f8dde 100644 (file)
@@ -79,7 +79,8 @@ Redmine::AccessControl.map do |map|
     map.permission :manage_wiki, {:wikis => [:edit, :destroy]}, :require => :member
     map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member
     map.permission :delete_wiki_pages, {:wiki => :destroy}, :require => :member
-    map.permission :view_wiki_pages, :wiki => [:index, :history, :diff, :annotate, :special]
+    map.permission :view_wiki_pages, :wiki => [:index, :special]
+    map.permission :view_wiki_edits, :wiki => [:history, :diff, :annotate]
     map.permission :edit_wiki_pages, :wiki => [:edit, :preview, :add_attachment, :destroy_attachment]
     map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member
   end
@@ -145,6 +146,6 @@ Redmine::Activity.map do |activity|
   activity.register :news
   activity.register :documents, :class_name => %w(Document Attachment)
   activity.register :files, :class_name => 'Attachment'
-  activity.register :wiki_pages, :class_name => 'WikiContent::Version', :default => false
+  activity.register :wiki_edits, :class_name => 'WikiContent::Version', :default => false
   activity.register :messages, :default => false
 end
index 234e971c4e94e2b48c82156b3fd06417107502c7..74cba27068a055b5402dedd7301ace32c2700695 100644 (file)
@@ -30,6 +30,7 @@ roles_001:
     - :view_documents\r
     - :manage_documents\r
     - :view_wiki_pages\r
+    - :view_wiki_edits\r
     - :edit_wiki_pages\r
     - :protect_wiki_pages\r
     - :delete_wiki_pages\r
@@ -72,6 +73,7 @@ roles_002:
     - :view_documents\r
     - :manage_documents\r
     - :view_wiki_pages\r
+    - :view_wiki_edits\r
     - :edit_wiki_pages\r
     - :protect_wiki_pages\r
     - :delete_wiki_pages\r
@@ -109,6 +111,7 @@ roles_003:
     - :view_documents\r
     - :manage_documents\r
     - :view_wiki_pages\r
+    - :view_wiki_edits\r
     - :edit_wiki_pages\r
     - :delete_wiki_pages\r
     - :add_messages\r
@@ -139,6 +142,7 @@ roles_004:
     - :view_documents\r
     - :manage_documents\r
     - :view_wiki_pages\r
+    - :view_wiki_edits\r
     - :edit_wiki_pages\r
     - :add_messages\r
     - :view_files\r
@@ -159,6 +163,7 @@ roles_005:
     - :view_time_entries\r
     - :view_documents\r
     - :view_wiki_pages\r
+    - :view_wiki_edits\r
     - :view_files\r
     - :browse_repository\r
     - :view_changesets\r