2016-04-06 12 views
1

私はZizaco/entrust laravelパッケージをプロジェクトのACLマネージャーとして使用しています。それにlaravelのリソースの各メソッドに別のミドルウェアを割り当てます

私はミドルウェアを経由するルートグループへのアクセスを制限するためと役割(または許可)を割り当てることを知って、私はこのようなことを行う必要があります。

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

しかし、私は別のに別々のパーミッションを割り当てますリソースコントローラのルート(メソッド)。

私はどのように全体のリソースのが、私は、各コントローラメソッドのためにそれを実装することができないことを知っている:

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

    }); 

私は、関連メソッドにこの権限をASSINGたい:

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

とそうです。

答えて

2

あなたは、コントローラのコンストラクタでミドルウェアを割り当てることができます。

class Foo extends Conroller 
{ 
    public function __construct() { 

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

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

私は多くのモデルがあり、それぞれが、それらは異なる方法を持っている個々のリソースを持っています。 各メソッドにミドルウェアを追加しますか? 他の単純で一般的な解決策はありませんか? –

+0

@ A.B.Developerミドルウェアは他のクラスと同様に1つの責任を負う必要があります。ミドルウェアを複数のメソッドで使用できるようにするには複雑な条件付きコードを書くことができますが、維持および展開が難しくなります。 –

+0

は良い答えではないようです。この方法では各メソッドごとに1つのミドルウェアを使用する必要があります。開発者にはあまりにも多くなるでしょう –

関連する問題