Hier ist, was ich gelernt/abgeleitet habe:
Guardianist tatsächlich das, was „Was darf der Benutzer tun?“ kapselt (eineGuardian-Instanz hat auch eineUser-Instanz).- Somit ist der richtige Ort für ein Berechtigungsprädikat einfach als Methode auf
Guardian(lib/guardian.rb). - Wenn die Methode lautet „Kann der Benutzer Z mit einem Xxxx-Objekt tun?“, dann gehört sie wahrscheinlich in eine der
XxxxGuardian-Mixin-Dateien (lib/guardian/...). - Andernfalls gehört sie in die Basisdefinition von
Guardian. ApplicationControllerverwaltet einguardian-Attribut, das die aktuelle Anfrage/den aktuellen Client widerspiegelt, und stellt es Serializern als derenscopezur Verfügung, sodass der aktuelleGuardianbei Bedarf verfügbar ist (außer wenn er es nicht ist[1])- Es gibt Stellen, an denen kein fertiger
Guardianverfügbar ist, typischerweise in einer Backend-Aufgabe, die vom System ausgeführt wird, aber wenn Sie einen „handelnden Benutzer“ haben (z. B. den Empfängerbenutzer bei der Erstellung einer E-Mail-Benachrichtigung), können Sie einen geeigneten Guardian im Handumdrehen erstellen:Guardian.new(the_user).