Commit dfed60056c9e3f6162e9e7f28a9da4a9de605f02
1 parent
1db348b8
Exists in
staging
and in
42 other branches
WorkAssignment privacy edition now works for all users
Refactored Cms Controller inheritance on Work Assignment Plugin. Added a new method on Cms controller that is extended on Work Assignment Plugin and can allow a plugin action to by pass the static before filter generated on Cms that denies any other actions outside it's list. Added a before filter on plugin cms controller that allows the visibility edition only for the article author and admins. Signed-off-by Tallys Martins <tallysmartins@gmail.com> Signed-off-by: Arhur Del Esposte <arthurmde@gmail.com> Signed-off-by: Luciano Prestes <lucianopcbr@gmail.com>
Showing
4 changed files
with
43 additions
and
21 deletions
Show diff stats
app/controllers/my_profile/cms_controller.rb
| ... | ... | @@ -30,9 +30,13 @@ class CmsController < MyProfileController |
| 30 | 30 | (user && (user.has_permission?('post_content', profile) || user.has_permission?('publish_content', profile))) |
| 31 | 31 | end |
| 32 | 32 | |
| 33 | + def self.add_as_exception?(action) | |
| 34 | + false | |
| 35 | + end | |
| 36 | + | |
| 33 | 37 | action_list = [:suggest_an_article, :set_home_page, :edit, :destroy, :publish, :upload_files, :new] |
| 34 | 38 | protect_if :except => action_list do |c, user, profile| |
| 35 | - user && (user.has_permission?('post_content', profile) || user.has_permission?('publish_content', profile)) | |
| 39 | + add_as_exception?(c.action_name) || user && (user.has_permission?('post_content', profile) || user.has_permission?('publish_content', profile)) | |
| 36 | 40 | end |
| 37 | 41 | |
| 38 | 42 | protect_if :only => :new do |c, user, profile| | ... | ... |
plugins/work_assignment/controllers/myprofile/work_assignment_plugin_cms_controller.rb
| ... | ... | @@ -1,19 +0,0 @@ |
| 1 | -class WorkAssignmentPluginCmsController < CmsController | |
| 2 | - | |
| 3 | - def edit_visibility | |
| 4 | - @folder = profile.articles.find(params[:article_id]) | |
| 5 | - @back_to = url_for(@folder.parent.url) | |
| 6 | - if request.post? | |
| 7 | - @folder.published = params[:article][:published] | |
| 8 | - unless params[:q].nil? | |
| 9 | - @folder.article_privacy_exceptions = params[:q].split(/,/).map{|n| environment.people.find n.to_i} | |
| 10 | - @folder.children.each do |c| | |
| 11 | - c.article_privacy_exceptions = params[:q].split(/,/).map{|n| environment.people.find n.to_i} | |
| 12 | - c.save! | |
| 13 | - end | |
| 14 | - end | |
| 15 | - @folder.save! | |
| 16 | - redirect_to @back_to | |
| 17 | - end | |
| 18 | - end | |
| 19 | -end | |
| 20 | 0 | \ No newline at end of file |
| ... | ... | @@ -0,0 +1,37 @@ |
| 1 | +require_dependency 'cms_controller' | |
| 2 | + | |
| 3 | +class CmsController | |
| 4 | + | |
| 5 | + | |
| 6 | +protect_if :only => :edit_visibility do |c,user,profile| | |
| 7 | + profile.articles.find(c.params[:article_id]).author == user || user.has_permission?('view_private_content', profile) | |
| 8 | +end | |
| 9 | + | |
| 10 | +def edit_visibility | |
| 11 | + @folder = profile.articles.find(params[:article_id]) | |
| 12 | + @back_to = url_for(@folder.parent.url) | |
| 13 | + if request.post? | |
| 14 | + @folder.published = params[:article][:published] | |
| 15 | + unless params[:q].nil? | |
| 16 | + @folder.article_privacy_exceptions = params[:q].split(/,/).map{|n| environment.people.find n.to_i} | |
| 17 | + @folder.children.each do |c| | |
| 18 | + c.article_privacy_exceptions = params[:q].split(/,/).map{|n| environment.people.find n.to_i} | |
| 19 | + c.save! | |
| 20 | + end | |
| 21 | + end | |
| 22 | + @folder.save! | |
| 23 | + redirect_to @back_to | |
| 24 | + end | |
| 25 | + end | |
| 26 | + | |
| 27 | +def self.add_as_exception?(action) | |
| 28 | + actions = "edit_visibility, search_article_privacy_exceptions" | |
| 29 | + | |
| 30 | + if actions.include? action | |
| 31 | + true | |
| 32 | + else | |
| 33 | + false | |
| 34 | + end | |
| 35 | + end | |
| 36 | + | |
| 37 | +end | |
| 0 | 38 | \ No newline at end of file | ... | ... |
plugins/work_assignment/lib/work_assignment_plugin/helper.rb
| ... | ... | @@ -83,7 +83,7 @@ module WorkAssignmentPlugin::Helper |
| 83 | 83 | m.articles_with_access.include?(@folder) |
| 84 | 84 | } |
| 85 | 85 | ) |
| 86 | - colorbox_button :edit, _('Edit'), { :controller => 'work_assignment_plugin_cms', | |
| 86 | + colorbox_button :edit, _('Edit'), { :controller => 'cms', | |
| 87 | 87 | :action => 'edit_visibility', :article_id => @folder.id, :tokenized_children => @tokenized_children} |
| 88 | 88 | end |
| 89 | 89 | end | ... | ... |