Je travaille sur une application de sondage et utilise Devise et Cancan pour l'authentification et l'autorisation. J'ai un modèle d'utilisateur généré par Devise et un modèle de sondage. Un sondage appartient à un utilisateur. Mon problème est que j'ai une action personnalisée dans mon contrôleur Polls et je n'arrive pas à faire fonctionner Cancan avec cette action personnalisée. Voilà ce que j'ai essayé de faire dans mon code:Application de cancan à des actions personnalisées
config/routes.rb:
match 'users/:user_id/polls' => 'polls#show_user'
Ability.rb:
def initialize(user)
user ||= User.new
if user.is? :admin
can :manage, :all
else # default
can :read, :all
can :manage, Poll, :user_id => user.id
can :show_user, Poll, :user_id => user.id
end # if else admin
end
polls_controller.rb:
class PollsController < ApplicationController
before_filter :authenticate_user!
load_and_authorize_resource :except => :show_user
def show_user
authorize! :show_user, user
@polls = Poll.find_all_by_user_id(params[:user_id])
render "index"
end
<...>
end
L'idée est que les sondages d'un utilisateur peuvent être consultés uniquement lorsque le propriétaire du sondage est connecté. Cependant, avec ce code, lorsque le propriétaire d'un sondage est signé ed in, cet utilisateur est expulsé de cette page avec un message indiquant que l'autorisation a échoué. Si je supprime la ligne authorize! :show_user, user
, un utilisateur connecté peut voir tous les sondages des autres utilisateurs (l'autorisation ne fonctionne pas du tout).
Quelqu'un peut-il voir ce que je pourrais manquer? Merci d'avance!
Votre suggestion a fonctionné, merci! – jules