Pregunta

Estoy intentando conseguir el método permit al trabajo utilizando la rieles-autorización-plugin y authlogic , y sigo corriendo en este error:

Cuando intento:

class ApplicationController < ActionController::Base
  ...
  before_filter permit 'admin'
  ...

Me sale esto:

Authorization::CannotObtainUserObject in HomeController#index
Couldn't find #current_user or @user, and nothing appropriate found in hash

Ahora tengo mi configuración de métodos current_user, y funciona, porque lo usé casi todo el resto de mi aplicación:

class ApplicationController < ActionController::Base
  ...

  helper_method :current_user

  private

  def current_user_session
    return @current_user_session if defined?(@current_user_session)
    @current_user_session = UserSession.find
  end

  def current_user
    return @current_user if defined?(@current_user)
    @current_user = current_user_session && current_user_session.record
  end

  ...

También sé que tengo los usuarios con los roles apropiados en mi base de datos, ya que este método funciona:

def require_admin
   unless current_user.is_admin? || current_user.is_root?
      flash[:warning] = 'You are not an administrator and cannot access this page.'
      redirect_to root_path
   end
end

Puedo hacer que todo funcione si acabo de ver cómo está el nivel de usuario utilizando la siguiente:

before_filter :require_admin, :only => 'index'

... pero ¿no debería ser capaz de lo mismo eficazmente con permit y permit??

Cualquier ayuda sería muy apreciada. Déjeme saber si usted necesita ver más código y estaré encantado de publicarlo. Realmente no hay nada en Google que puedo hacer heads-o-colas de conseguir cuanto a estos dos sistemas para trabajar unos con otros.

¿Fue útil?

Solución

Bueno, creo que lo he descubierto.

Como Jared señaló correctamente, el uso adecuado es

permit 'admin'

(no como parte de un before_filter).

Sin embargo ...

... la :get_user_method predeterminado se establece en #current_user, que es la que utiliza el plugin acts_as_authenticated. Yo, como se señaló anteriormente, estoy usando AuthLogic, en donde tengo el método definido como current_user (sin el signo de libra).

Por lo tanto, yo había intentado el siguiente:

permit 'admin', :get_user_method => current_user

Sólo para ser recibidos por un simpático mensaje de error explicando que no tenía tales variable o método. Lo que me faltaba, sin embargo, es que la opción de hash toma una cadena , no una llamada directa al método !! (Estúpido error, lo sé!)

Entonces

permit 'admin', :get_user_method => 'current_user'

... parece que funciona para mí.

Me encanta Ruby y Rails, pero a veces su simplicidad puede ser una maldición de su propia; Siempre me propiedad de las cosas simples. :)

Otros consejos

Está utilizando el plug-in de forma incorrecta. No debe ser colocado en un filtro antes.

A nivel mundial, sólo tiene que declarar:

permit 'admin'

Eso es todo.

Todas sus acciones buscará un objeto o current_user @user y redirigir a la página de inicio de sesión si no.

En un nivel por acción, lo usa como un bloque:

def index
  permit 'admin' do
    @some_models = SomeModel.all
  end
end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top