[Ovirt-devel] [PATCH server 2/4] * app/controllers/application.rb: handler for permission errors
David Lutterkort
lutter at redhat.com
Mon May 4 23:15:48 UTC 2009
Use Rails' rescue_from to catch permission errors and render an appropriate
response.
---
src/app/controllers/application.rb | 35 +++++++++++++++++++++++++++++++++++
1 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/src/app/controllers/application.rb b/src/app/controllers/application.rb
index e5f4d4b..3902e78 100644
--- a/src/app/controllers/application.rb
+++ b/src/app/controllers/application.rb
@@ -48,6 +48,8 @@ class ApplicationController < ActionController::Base
before_filter :tmp_authorize_admin, :only => [:create, :update, :destroy]
before_filter :is_logged_in, :get_help_section
+ # General error handlers
+ rescue_from PermissionError, :with => :handle_perm_error
def choose_layout
if(params[:component_layout])
@@ -140,6 +142,39 @@ class ApplicationController < ActionController::Base
end
end
+ def handle_perm_error(error)
+ handle_error(:error => error, :status => :forbidden,
+ :title => "Access denied")
+ end
+
+ def handle_error(hash)
+ msg = hash[:message] || hash[:error].message
+ title = hash[:title] || "Internal Server Error"
+ status = hash[:status] || :internal_server_error
+ respond_to do |format|
+ format.html do
+ @title = title || "Something went very wrong"
+ @errmsg = msg
+ @ajax = params[:ajax]
+ @nolayout = params[:nolayout]
+ if @ajax
+ render :template => 'layouts/popup-error', :layout => 'tabs-and-content'
+ elsif @nolayout
+ render :template => 'layouts/popup-error', :layout => 'help-and-content'
+ else
+ render :template => 'layouts/popup-error', :layout => 'popup'
+ end
+ end
+ format.json do
+ @json_hash ||= {}
+ @json_hash[:success] = (status == :ok)
+ @json_hash[:alert] = msg
+ render :json => @json_hash
+ end
+ format.xml { head status }
+ end
+ end
+
# don't define find_opts for array inputs
def json_hash(full_items, attributes, arg_list=[], find_opts={}, id_method=:id)
page = params[:page].to_i
--
1.6.0.6
More information about the ovirt-devel
mailing list