Sha256: 188ce057445c84f99ed7be524565c47a8dcd8d6654f008f5e6e9a3cf27578e26

Contents?: true

Size: 1.71 KB

Versions: 12

Compression:

Stored size: 1.71 KB

Contents

Spree::BaseController.class_eval do
  before_filter :set_current_user

  # graceful error handling for cancan authorization exceptions
  rescue_from CanCan::AccessDenied do |exception|
    return unauthorized
  end

  private
    # Needs to be overriden so that we use Spree's Ability rather than anyone else's.
    def current_ability
      @current_ability ||= Spree::Ability.new(current_user)
    end
    # Redirect as appropriate when an access request fails.  The default action is to redirect to the login screen.
    # Override this method in your controllers if you want to have special behavior in case the user is not authorized
    # to access the requested action.  For example, a popup window might simply close itself.
    def unauthorized
      respond_to do |format|
        format.html do
          if current_user
            flash.now[:error] = t(:authorization_failure)
            render 'spree/shared/unauthorized', :layout => '/spree/layouts/spree_application'
          else
            store_location
            redirect_to spree.login_path and return
          end
        end
        format.xml do
          request_http_basic_authentication 'Web Password'
        end
        format.json do
          render :text => "Not Authorized \n", :status => 401
        end
      end
    end

    def store_location
      # disallow return to login, logout, signup pages
      disallowed_urls = [spree.signup_url, spree.login_url, spree.destroy_user_session_path]
      disallowed_urls.map!{ |url| url[/\/\w+$/] }
      unless disallowed_urls.include?(request.fullpath)
        session['user_return_to'] = request.fullpath.gsub('//', '/')
      end
    end

    def set_current_user
      Spree::User.current = current_user
    end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
spree_auth-1.0.7 app/controllers/spree/base_controller_decorator.rb
spree_auth-1.0.6 app/controllers/spree/base_controller_decorator.rb
spree_auth-1.0.5 app/controllers/spree/base_controller_decorator.rb
spree_auth-1.0.4 app/controllers/spree/base_controller_decorator.rb
spree_auth-1.0.3 app/controllers/spree/base_controller_decorator.rb
spree_auth-1.0.2 app/controllers/spree/base_controller_decorator.rb
spree_auth-1.0.1 app/controllers/spree/base_controller_decorator.rb
spree_auth-1.0.0 app/controllers/spree/base_controller_decorator.rb
spree_auth-1.0.0.rc4 app/controllers/spree/base_controller_decorator.rb
spree_auth-1.0.0.rc3 app/controllers/spree/base_controller_decorator.rb
spree_auth-1.0.0.rc2 app/controllers/spree/base_controller_decorator.rb
spree_auth-1.0.0.rc1 app/controllers/spree/base_controller_decorator.rb