ruby-on-rails-3 - manage - rails gem rolify
cancan skip_authorization_check para la autenticación de Devise (1)
Debido a que cualquiera puede registrarse y luego iniciar sesión, ... y debido a que un usuario no está identificado para las funciones hasta después de iniciar sesión, ¿no tiene sentido omitir la autorización de comprobación para Devise?
Siguiendo esa premisa, heredo del controlador de registro Devise con este registrations_controller y lo coloqué en el directorio del controlador.
class Users::RegistrationsController < Devise::RegistrationsController
skip_authorization_check
end
cambiar al archivo de rutas:
devise_for :users, :controllers => { :registrations => "registrations" }
Me falta algo, sin embargo:
This action failed the check_authorization because it does not authorize_resource. Add skip_authorization_check to bypass this check.
Gracias por tu ayuda.
La solución fácil
check_authorization :unless => :devise_controller?
Si tiene que poner check_authorization en cada controlador manualmente en algún momento, olvidará y abrirá un agujero de seguridad en su aplicación. Es mejor incluir explícitamente en la lista blanca los controladores que no necesitan auth por cancan.
Esto queda claro en los documentos de CANCAN en
https://github.com/ryanb/cancan/wiki/Ensure-Authorization
EDITAR
class ApplicationController < ActionController::Base
check_authorization :unless => :do_not_check_authorization?
private
def do_not_check_authorization?
respond_to?(:devise_controller?) or
condition_one? or
condition_two?
end
def condition_one?
...
end
def condition_two?
...
end
end