2016-07-19 39 views
0

Ich habe ein Rollen/Berechtigungssystem implementiert. Jetzt möchte ich eine Methode, um Laravel Router hinzufügen, damit ich so etwas wie dies machen:Laravel Router erweitern

Route::get('sales', '[email protected]')->allow('Salesman'); 

Ich weiß, dass ich verwenden kann @can('Salesman')(View) und $user->can('Salesman')(Controller) aber ich fand so viel lesbar die Art, wie ich das versuche, da ich den Zugriff auf alle Rollenrechte in der routes-Datei sehen kann.

Antwort

0

Da Sie die Fassade verwenden, um die Routen zu generieren. Das sollte ziemlich einfach sein. Die Fassade kann im config/app.phpfacades Array übergangen werden.

Sie können Ihre eigenen Facade class generieren und die native mit Ihrer ersetzen. Was ist tatsächlich ein Router class. Um die Funktionalität, die Sie benötigen, zu erweitern und außer Kraft setzen die folgenden nacheinander zu implementieren:

  • Fassade
  • Router :: newRoute
  • Route

Durch die letzte Verlängerung und Rückkehr diejenigen in die newRoute Methode des Routers, können Sie die Logik von Laravel übersteuern.

0

Sie können die Router-Klasse überschreiben und sie dann in einem Service-Container registrieren, der von Route facade verwendet werden soll.

Um mehr klar:

  • eine Klasse schreiben, die Laravel Router (ich glaube, Router Klasse) erstreckt. Um dies zu finden, öffnen Sie die Route Fassade, dann finden Sie ihren Dienstanbieter. Von dort sollte es leicht sein, die Router-Klasse zu finden.
  • Schreiben Sie eine Klasse, die diesen Router überschreibt. Stellen Sie sicher, dass Sie die zuvor gefundene Klasse erweitern.
  • Schreiben Sie einen Dienstanbieter, der die Routerdienste überschreibt. Das bedeutet praktisch, dass Sie Ihren Dienst unter dem gleichen Schlüsselnamen registrieren müssen, den Sie in Route Fassade finden.

Und das sollte es sein. Ihr Service wird jetzt automatisch von Route Fassade ausgewählt.

+0

Ich bekomme diese Ausnahme, nachdem Sie alles gesagt haben: Deklaration von App \ Provider \ RouteServiceProvider :: boot (App \ Router $ router) sollte mit Illuminate \ Foundation \ Support \ Providers \ RouteServiceProvider :: boot (Illuminate) kompatibel sein \ Routing \ Router $ router) – Alan

+0

Sie erweitern vielleicht Ihren Provider von Laravel. Dies ist nicht notwendig und kann Probleme wie diese verursachen. Lies einfach, was Laravel in diesem Provider macht ('RouteServiceProvider'), und mach deinen einfach so. Ersetzen Sie den 'Router' durch Ihren eigenen. – vfsoraki

+0

Ich erweitere den Anbieter nicht. Ich erweitere Laravel Router. – Alan