Je ne pense pas que vous pouvez le faire avec CanCan tout droit sorti de la boîte. Cela ne permet vraiment que de dire si un utilisateur peut ou ne peut pas faire quelque chose.
Je me demande si vous pouvez l'utiliser d'une manière atypique mais en définissant plusieurs Ability
sous-classes pour vérifier les autorisations. L'implémentation par défaut consiste à créer une instance de Ability
pour l'utilisateur actuel et à l'interroger.
Si vous avez créé une collection de sous-classes Ability
pour refléter les différents types d'accès que vous souhaitez vérifier, vous pouvez ensuite demander à chacune si l'utilisateur peut ou ne peut pas faire quelque chose. Le premier à refuser l'autorisation serait alors utilisé pour générer votre message d'erreur spécifique.
Vous devez seulement créer une classe d'aptitude globale pour combiner la collection de sous-classes Ability
et la créer dans la méthode current_ability
que CanCan fournit pour renvoyer la capacité pour l'utilisateur actuel. Puis, en fournissant les mêmes méthodes can?
et cannot?
sur votre classe, il fonctionnera de la même manière que les capacités normales mais vous seriez en mesure de l'étendre à fournir une méthode why?
qui pourrait identifier les Ability
sous-classe a refusé l'autorisation et générer un autre message d'erreur en conséquence.
En fait, vous devrez également fournir une nouvelle implémentation de authorize!
pour que le message d'erreur souhaité s'affiche. Désolé, longue réponse qui est essentiellement - vous auriez à le faire vous-même.
Bon, alors, ce sera juste un défi super excitant. Ou quelque chose que je ne prends pas la peine de faire. Merci :) – Matchu