diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2008-03-30 14:20:07 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2008-03-30 14:20:07 +0000 |
commit | da641f4122f7034b87a67e87386104fb5d121166 (patch) | |
tree | 30b8b5d477a493af032a76ece3b0533c03eed6c1 /app | |
parent | 287d86e3632546b06aeb955db8b0e5eea139082b (diff) | |
download | redmine-da641f4122f7034b87a67e87386104fb5d121166.tar.gz redmine-da641f4122f7034b87a67e87386104fb5d121166.zip |
Global queries can be saved from the global issue list (follows r1311 and closes #897).
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1312 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/queries_controller.rb | 7 | ||||
-rw-r--r-- | app/models/user.rb | 31 | ||||
-rw-r--r-- | app/views/issues/_sidebar.rhtml | 2 | ||||
-rw-r--r-- | app/views/issues/index.rhtml | 2 |
4 files changed, 26 insertions, 16 deletions
diff --git a/app/controllers/queries_controller.rb b/app/controllers/queries_controller.rb index 194b1df57..da2c4a2c8 100644 --- a/app/controllers/queries_controller.rb +++ b/app/controllers/queries_controller.rb @@ -19,7 +19,7 @@ class QueriesController < ApplicationController layout 'base' menu_item :issues before_filter :find_query, :except => :new - before_filter :find_project, :authorize, :only => :new + before_filter :find_optional_project, :only => :new def new @query = Query.new(params[:query]) @@ -72,8 +72,9 @@ private render_404 end - def find_project - @project = Project.find(params[:project_id]) + def find_optional_project + @project = Project.find(params[:project_id]) if params[:project_id] + User.current.allowed_to?(:save_queries, @project, :global => true) rescue ActiveRecord::RecordNotFound render_404 end diff --git a/app/models/user.rb b/app/models/user.rb index ae81d46d2..e0b1e238c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -222,17 +222,26 @@ class User < ActiveRecord::Base # action can be: # * a parameter-like Hash (eg. :controller => 'projects', :action => 'edit') # * a permission Symbol (eg. :edit_project) - def allowed_to?(action, project) - # No action allowed on archived projects - return false unless project.active? - # No action allowed on disabled modules - return false unless project.allows_to?(action) - # Admin users are authorized for anything else - return true if admin? - - role = role_for_project(project) - return false unless role - role.allowed_to?(action) && (project.is_public? || role.member?) + def allowed_to?(action, project, options={}) + if project + # No action allowed on archived projects + return false unless project.active? + # No action allowed on disabled modules + return false unless project.allows_to?(action) + # Admin users are authorized for anything else + return true if admin? + + role = role_for_project(project) + return false unless role + role.allowed_to?(action) && (project.is_public? || role.member?) + + elsif options[:global] + # authorize if user has at least one role that has this permission + roles = memberships.collect {|m| m.role}.uniq + roles.detect {|r| r.allowed_to?(action)} + else + false + end end def self.current=(user) diff --git a/app/views/issues/_sidebar.rhtml b/app/views/issues/_sidebar.rhtml index c269eee06..e94d4180b 100644 --- a/app/views/issues/_sidebar.rhtml +++ b/app/views/issues/_sidebar.rhtml @@ -1,6 +1,6 @@ -<% if @project %> <h3><%= l(:label_issue_plural) %></h3> <%= link_to l(:label_issue_view_all), { :controller => 'issues', :action => 'index', :project_id => @project, :set_filter => 1 } %><br /> +<% if @project %> <%= link_to l(:field_summary), :controller => 'reports', :action => 'issue_report', :id => @project %><br /> <%= link_to l(:label_change_log), :controller => 'projects', :action => 'changelog', :id => @project %> <% end %> diff --git a/app/views/issues/index.rhtml b/app/views/issues/index.rhtml index 0123099f2..027f3f006 100644 --- a/app/views/issues/index.rhtml +++ b/app/views/issues/index.rhtml @@ -18,7 +18,7 @@ :update => "content", }, :class => 'icon icon-reload' %> - <% if current_role && current_role.allowed_to?(:save_queries) %> + <% if User.current.allowed_to?(:save_queries, @project, :global => true) %> <%= link_to l(:button_save), {}, :onclick => "$('query_form').submit(); return false;", :class => 'icon icon-save' %> <% end %> </p> |