Ich würde wissen, wie das load_and_authorize_resource
im Inneren funktioniert.
Ich suchte die GitHub-Seite Link und versuchte zu verstehen, aber ich tat es nicht Ich finde nichts nützliches. Ich verstehe nur, dass load_and_authorize_resource
wie ein before_filter ist und es (in gewisser Weise) die Fähigkeit, die wir in skill.rb
Ich würde besser wissen, wie das möglich ist. Ich meine, ich möchte nicht ALLE Edelsteine studieren, aber ich möchte nur sehen, wie ich die Fähigkeit einer Ressource in einem Controller laden kann und ob load_and_authorize_resource
wirklich eine Art von vor_filter ist.
Haftungsausschluss : Aus Gründen der Einfachheit verwarne ich einige Aufrufe kurzer innerer Methoden absichtlich. Die vollständige Aufrufkette kann durch Befolgen der load_and_authorize_resource
-Methodendefinition usw. erreicht werden.
Wie in der Dokumentation angegeben, richtet load_and_authorize_resource
eine before_filter
...
... ruft zwei Methoden auf: load_resource
und authorize_resource
.
Um die Idee ihres Verhaltens zu verstehen, werden wir uns beide genau ansehen.
Basierend auf params
hash, das an Ihre Controller-Aktion übergeben wurde, entscheidet load_resource
, ob es eine neue Instanz einer Klasse (zB Post.new
) oder find
eine bestimmte Instanz basierend auf% erhalten soll. co_de% (zB params[:id]
). Diese Instanz (oder eine Sammlung von Instanzen für Aktionen wie Post.find(params[:id])
) wird der entsprechenden Instanzvariable Ihrer Controller-Aktion zugewiesen.
Später wird index
aufgerufen. Seine innere Logik-Syntax sollte Ihnen vertraut sein: Das Überprüfen der Fähigkeiten mit den Händen sieht genauso aus wie das, was innerhalb dieser Methode geschieht. Im Grunde nehmen Sie eine authorize_resource
, die Sie im vorherigen Schritt erhalten haben, resource_instance
, was der Name einer aktuellen Aktion ist, und prüfen Sie, ob auf bestimmte Aktionen für bestimmte Objekte zugegriffen werden kann.
Solange das Auslösen von Ausnahmen innerhalb von params[:action]
die Ausführung der Controller-Aktion verhindert, wird die Autorisierung der Anwendung fehlgeschlagen und Sie werden zur Home-URL der Anwendung umgeleitet, die 500-Fehlerseite oder das von Ihnen definierte Verhalten für before_filter
handling / p>
Andererseits, falls Sie die Autorisierung erfolgreich bestanden haben, wird Ihr Aktionscode ausgeführt. Jetzt haben Sie Zugriff auf die Instanzvariable (z. B. CanCan::AccessDenied
), die von @post
at CanCan
step eingerichtet wurde.
Tags und Links ruby-on-rails-3 ruby-on-rails ruby-on-rails-4 cancan