2016-04-06 11 views
1

Ich verwende Zizaco/entrust Laravel-Paket als ACL-Manager für mein Projekt.zuweisen separate Middleware zu jeder Methode einer Ressource in Laravel

Ich weiß, dass für den Zugang zu einer Route Gruppe über Middle und eine Rolle zuweisen (oder die Erlaubnis), um es, ich, dass wie dies tun soll:

Route::group(['prefix' => 'admin', 'middleware' => ['role:admin']], function() { 
    .... 
}); 

Aber ich mag getrennte Erlaubnis zu verschiedenen zuweisen Routen (Methoden) eines Ressourcencontrollers.

Ich weiß, dass, wie kann, so dass für die gesamte Ressource, aber ich es für jede Controller-Methode nicht implementieren kann:

Route::group(['prefix' => 'admin', 'middleware' => ['role:admin']], function() { 
     Route::resource('/post', ['middleware' => ['permission:manage-posts'], 'uses' => 'PostController']); 

    }); 

ich diese Erlaubnis zu verwandter Methode assing will:

'post-create' => public function create() 
'post-edit' => public function edit() 

und bald.

Antwort

2

Sie können Middle in Ihrem Controller Konstruktor zuweisen:

class Foo extends Conroller 
{ 
    public function __construct() { 

     $this->middleware('post-create', ['only' => ['create']]); 

     $this->middleware('post-edit', ['only' => ['edit']]); 
    } 
} 
+0

ich viele Modelle haben und haben jeweils einzelne Ressourcen, die denen unterschiedliche Methoden. füge ich Middleware für jede Methode hinzu? gibt es keine andere einfache und allgemeine Lösung? –

+0

@ A.B.Developer Middlewares wie jeder andere Klassen sollten eine einzige Verantwortung haben, könnten Sie einige komplizierte bedingte Code schreiben, um eine Middleware für mehr als eine Methode verwendbar zu machen, aber dann wird es schwieriger zu pflegen und zu erweitern. –

+0

scheint keine gute Antwort zu sein. Diese Methode muss für jede Methode eine Middleware verwenden. Wird zu viel für den Entwickler sein –

Verwandte Themen