rails gema ruby-on-rails devise cancan

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.