Ich gehe gerade durch einen kleinen Refactor mit meinen Rollen, Berechtigungen und Routen und stellte mir die gleiche Frage.
Auf der Oberflächenniveau scheint es wahre Middleware und Richtlinien führen die gleiche allgemeine Idee. Überprüfen Sie, ob ein Benutzer tun kann, was er tut.
Als Referenz ist hier die Laravel docs ...
Middleware "Darf ich das sehen? Darf ich hier gehen?"
HTTP-Middleware bietet einen bequemen Mechanismus zum Filtern von HTTP-Anfragen in Ihre Anwendung eingeben. Zum Beispiel enthält Laravel eine Middleware, die überprüft, ob der Benutzer Ihrer Anwendung authentifiziert ist. Wenn der Benutzer nicht authentifiziert ist, leitet die Middleware den Benutzer auf den Anmeldebildschirm um: . Wenn der Benutzer jedoch authentifiziert ist, lässt die Middleware die Anforderung weiter weiter in die Anwendung.
Natürlich kann zusätzliche Middleware geschrieben werden, um eine Vielzahl von Aufgaben neben der Authentifizierung durchzuführen . Eine CORS-Middleware könnte verantwortlich für das Hinzufügen der richtigen Header zu allen Antworten sein Ihre Anwendung verlassen. Eine protokollierende Middleware protokolliert möglicherweise alle eingehenden Anforderungen in Ihrer Anwendung.
https://laravel.com/docs/master/middleware#introduction
In meiner Lektüre ist Middleware über auf Antrag Ebene. In den Bedingungen von "Kann dieser Benutzer eine Seite sehen?" Oder "Kann dieser Benutzer hier etwas tun?"
Wenn ja, geht es zu der Controller-Methode, die dieser Seite zugeordnet ist. Interessanterweise könnte Middleware sagen: "Ja, du darfst dorthin gehen, aber ich werde aufschreiben, dass du gehst." Etc.
Sobald es fertig ist. Es hat keine Kontrolle mehr oder sagt, was der Benutzer tut. Eine andere Art, wie ich es als Middleperson denke.
Richtlinien "Kann ich das tun? Kann ich das ändern?"
Neben der Box heraus Authentifizierungsdienst bereitstellt, Laravel bietet auch eine einfache Möglichkeit, Berechtigungslogik und steuert den Zugriff auf Ressourcen zu organisieren. Es gibt eine Vielzahl von Methoden und Helfer, die Ihnen helfen, Ihre Autorisierungslogik zu organisieren, und wir werden jeden von ihnen in diesem Dokument behandeln.
https://laravel.com/docs/master/authorization#introduction
Richtlinien scheinen jedoch mehr betroffen zu sein mit tun. Kann der Benutzer einen Eintrag aktualisieren oder nur ihren?
Diese Fragen scheinen für eine Controller-Methode geeignet zu sein, in der alle Handlungsaufforderungen für eine Ressource organisiert sind. Rufen Sie dieses Objekt ab, speichern oder aktualisieren Sie den Artikel.
Als tjbb mentioned kann Middleware Routen sehr unordentlich und schwer zu verwalten machen. Dies ist ein Beispiel aus meiner Routen-Datei:
Das Problem
Route::group(['middleware' =>'role:person_type,person_type2',], function() {
Route::get('download-thing/{thing}', [
'as' => 'download-thing',
'uses' => '[email protected]'
]);
});
Das wird sehr schwer in meiner Route-Datei zu lesen!
Ein anderer Ansatz mit Politik
//ThingController
public function download(Thing $thing)
{
//Policy method and controller method match, no need to name it
$this->authorize($thing);
//download logic here....
}
Ich denke, man sollte es so aussehen versuchen: * Middleware * für * Authentifizieren verwendet * während * Richtlinien * sind für die Verwendung von * Genehmigung *. – haakym