Voici ce que j’ai appris/déduit :
Guardianest bien ce qui encapsule « Qu’est-ce que l’utilisateur est autorisé à faire ? » (Une instance deGuardiana aussi une instance deUser.)- 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. ApplicationControllergère un attributguardianreflétant la requête/le client actuel, et le fournit aux sérialiseurs comme leurscope, de sorte que leGuardianactuel est disponible quand nécessaire (sauf quand il ne l’est pas[1])- Il existe des endroits où un
Guardianprê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).