2016-04-06 50 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與任何其他類一樣,中間件應該有一個單獨的責任,您可以編寫一些複雜的條件代碼,以使中間件可用於多種方法,但隨後難以維護和擴展。 –

+0

似乎不是一個好的答案。這種方法將需要爲每種方法使用一箇中間件。對於開發人員來說太多了 –

相關問題