Rails: autorizando al usuario con el problema de la gema CanCan

Tengo una acción en mi controlador que se parece a la siguiente:

  def show
    @user = User.find(params[:user_id])
    # ... more stuff.
  end

Tenga en cuenta que estoy anulando la carga del recurso cuando CanCan intenta cargar con params[:id] y necesito usar params[:user_id] aquí.

La parte superior de mi controlador tiene lo siguiente definido:

  authorize_resource :only => [:show]

Y en Ability.rb:

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new
    can :show, User if :id == user.id
  end
end

Sin embargo, todas mis invocaciones no están autorizadas. Estoy usando devise para la autenticación y estoy verificando que el user El objeto que se pasa a initialize es, de hecho, el usuario que ha iniciado sesión. ¿Cómo verifico que haya iniciado sesión user ¿Solo puede ver el perfil para el que están solicitando y ningún otro perfil?

preguntado el 27 de agosto de 11 a las 20:08

1 Respuestas

No está anulando la carga del recurso, ya que esto se lleva a cabo antes de la acción:

authorize_resource :only => [:show]

En su lugar, debe eliminarlo y agregar la autorización a su acción o un before_filter separado.

def show
  @user = User.find(params[:user_id])
  authorize! :show, @user

Respondido 28 ago 11, 01:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.