rails manage cancancan all ability ruby-on-rails-3 devise cancan

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