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