ruby-on-rails - gema - devise roles
Devise/Cancan redirigir el problema de administrador (2)
Usar before_filter
https://github.com/plataformatec/devise#controller-filters-and-helpers
class AdminController < ApplicationController
before_filter :authenticate_user!, only: [:index]
before_filter :is_admin, only: [:index]
def index
end
private
def is_admin
if user_signed_in?
if current_user.admin?
true
else
redirect_to home_index_path
end
else
redirect_to login_path
end
end
end
user_signed_in?
el usuario de verificación tiene current_user.admin?
sesión y current_user.admin?
check es admin cuando el índice de acceso
o
def is_admin
if current_user.nil?
redirect_to login_path
else
if current_user.admin?
true
else
redirect_to home_index_path
end
end
end
Tengo un modelo de usuario con un interruptor booleano para designar admin t / f. Mi controlador de aplicación actual:
class ApplicationController < ActionController::Base
protect_from_forgery
def after_sign_in_path_for(user)
if current_user.admin?
admin_index_path
else
dashboard_index_path
end
end
end
Mi controlador de administrador actual:
class AdminController < ApplicationController
def index
if current_user.admin?
admin_index_path
else
home_index_path
end
end
end
El objetivo es, por supuesto, solo permitir el acceso a la página de índice de administrador a los usuarios administradores. La redirección funciona bien cuando inicio sesión como administrador, pero obtengo un error NoMethodError en AdminController # cuando navego a admin_index_path como un usuario no administrador (método indefinido `admin ''para nil: NilClass). Ayuda sobre este tema? Siento que probablemente haya una solución CanCan que sea más elegante y segura, pero no he encontrado una buena explicación de cómo lograr eso. ¿Pensamientos? ¡Gracias por adelantado!
utilizar recurso en lugar de usarlo es más genérico
def after_sign_in_path_for (resource) if current_user.admin? vía_index_administración else vía_de_inicio_de_datos
y acaba de poner before_filter: authenticate_user! en acción de índice. resolverá tu problema obtienes un error nulo de clase porque la variable current_user no está configurada porque el usuario no ha iniciado sesión.