Der richtige Ort, um eine Berechtigungsprädikat vorzuschlagen?

Hier ist, was ich gelernt/abgeleitet habe:

  • Guardian ist tatsächlich das, was „Was darf der Benutzer tun?“ kapselt (eine Guardian-Instanz hat auch eine User-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.
  • ApplicationController verwaltet ein guardian-Attribut, das die aktuelle Anfrage/den aktuellen Client widerspiegelt, und stellt es Serializern als deren scope zur Verfügung, sodass der aktuelle Guardian bei Bedarf verfügbar ist (außer wenn er es nicht ist[1])
  • Es gibt Stellen, an denen kein fertiger Guardian verfü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).

  1. ↩︎