Lieu approprié pour proposer une prédicat de permissions ?

Voici ce que j’ai appris/déduit :

  • Guardian est bien ce qui encapsule « Qu’est-ce que l’utilisateur est autorisé à faire ? » (Une instance de Guardian a aussi une instance de User.)
  • Ainsi, l’endroit approprié pour un prédicat de permission est simplement une méthode sur Guardian (lib/guardian.rb).
  • Si la méthode est du type « L’utilisateur peut-il faire Z à un objet Xxxx ? », alors elle appartient probablement à l’un des fichiers de mixin XxxxGuardian (lib/guardian/...).
  • Sinon, elle va dans la définition de base de Guardian.
  • ApplicationController gère un attribut guardian reflétant la requête/le client actuel, et le fournit aux sérialiseurs comme leur scope, de sorte que le Guardian actuel est disponible quand nécessaire (sauf quand il ne l’est pas[1])
  • Il existe des endroits où un Guardian prêt à l’emploi n’est pas disponible, généralement dans une tâche backend exécutée par le système, mais si vous avez une référence à un « utilisateur agissant » (par exemple, l’utilisateur destinataire, lors de la génération d’une notification par e-mail), vous pouvez créer un gardien approprié à la volée : Guardian.new(the_user).

  1. ↩︎