Comment passer un hash de paramêtres à la méthode can de CanCan

Vous connaissez certainement CanCan le système de gestion des droits pour les applications rubyonrails. Can admet 2 paramêtres fixe :

- Le premier est une action ou un alias de plusieurs actions (:index, :show, :manage)

- Le deuxième est la ressource, une classe, ou un symbole correspondant à un controller.

can [:index, :show], Product

On peut également passer à CanCan des paramêtres optionnels pour filtrer les droits en fonction de l'utilisateur (ici si le créateur du produit et l'utilisateur est si le produit est disponible) :

can [:index, :show], Product, :user_id => user.id, :available => true

Dans certains cas, par exemple quand les conditions peuvent être factorisées, il peut être intéressant de passer un hash en utilisant varargs, voici comment faire :

conditions = [{ :user_id => user.id, :available => true }]

can [:index, :show], Product, *conditions

Voir l'article avec l'application des varargs pour ActiveRecord : Varargs en ruby pour ActiveRecord