CanCan Erklärung von load_and_authorize_resource

8

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

geschrieben haben, lädt

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.

    
Vito 15.06.2015, 08:09
quelle

1 Antwort

11

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 ...

ein %Vor%

... ruft zwei Methoden auf: load_resource und authorize_resource .

%Vor%

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.

%Vor%

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.

%Vor%

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.

    
twonegatives 15.06.2015, 09:03
quelle