lib/clearance/authorization.rb in clearance-1.11.0 vs lib/clearance/authorization.rb in clearance-1.12.0

- old
+ new

@@ -4,33 +4,63 @@ included do hide_action :authorize, :deny_access, :require_login end + # Use as a `before_action` to require a user be signed in to proceed. + # {Authentication#signed_in?} is used to determine if there is a signed in + # user or not. + # + # class PostsController < ApplicationController + # before_action :require_login + # + # def index + # # ... + # end + # end def require_login unless signed_in? - deny_access + deny_access(I18n.t("flashes.failure_when_not_signed_in")) end end + # @deprecated use {#require_login} def authorize warn "[DEPRECATION] Clearance's `authorize` before_filter is " + "deprecated. Use `require_login` instead. Be sure to update any " + "instances of `skip_before_filter :authorize` or " + "`skip_before_action :authorize` as well" require_login end + # Responds to unauthorized requests in a manner fitting the request format. + # `js`, `json`, and `xml` requests will receive a 401 with no body. All + # other formats will be redirected appropriately and can optionally have the + # flash message set. + # + # When redirecting, the originally requested url will be stored in the + # session (`session[:return_to]`), allowing it to be used as a redirect url + # once the user has successfully signed in. + # + # If there is a signed in user, the request will be redirected according to + # the value returned from {#url_after_denied_access_when_signed_in}. + # + # If there is no signed in user, the request will be redirected according to + # the value returned from {#url_after_denied_access_when_signed_out}. + # For the exact redirect behavior, see {#redirect_request}. + # + # @param [String] flash_message def deny_access(flash_message = nil) respond_to do |format| format.any(:js, :json, :xml) { head :unauthorized } format.any { redirect_request(flash_message) } end end protected + # @api private def redirect_request(flash_message) store_location if flash_message flash[:notice] = flash_message @@ -41,39 +71,52 @@ else redirect_to url_after_denied_access_when_signed_out end end + # @api private def clear_return_to session[:return_to] = nil end + # @api private def store_location if request.get? session[:return_to] = request.original_fullpath end end + # @api private def redirect_back_or(default) redirect_to(return_to || default) clear_return_to end + # @api private def return_to if return_to_url uri = URI.parse(return_to_url) "#{uri.path}?#{uri.query}".chomp('?') end end + # @api private def return_to_url session[:return_to] end + # Used as the redirect location when {#deny_access} is called and there is a + # currently signed in user. + # + # @return [String] def url_after_denied_access_when_signed_in Clearance.configuration.redirect_url end + # Used as the redirect location when {#deny_access} is called and there is + # no currently signed in user. + # + # @return [String] def url_after_denied_access_when_signed_out sign_in_url end end end