2016-04-06 2 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']); 

    }); 

Я хочу Ассинг это разрешение соответствующего метода:

'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 У Middlewares, как и на любые другие классы, должна быть одна ответственность, вы можете написать сложный условный код, чтобы сделать промежуточное программное обеспечение более чем одним методом, но тогда ему будет сложнее поддерживать и расширять. –

+0

, похоже, не является хорошим ответом. этот метод должен будет использовать одно промежуточное ПО для каждого метода. Будет слишком много для разработчика –

Смежные вопросы