目标:我想使用
Route::group和Route::filter在Laravel 4中制作路径过滤器描述
我有两个类型的用户:
对于Internal,我有两个组:
对于Distributor,我有4个组:
合格线路
OEM分销商只符合5条路线的条件。
Route::get('distributors/{id}', array('before' =>'profile', 'uses'=>'DistributorController@show'));
Route::get('distributors/{id}/edit', 'DistributorController@edit');
Route::put('distributors/{id}/update', array('as'=>'distributors.update', 'uses'=>'DistributorController@update'));
Route::get('catalog_downloads','CatalogDownloadController@index');
Route::get('catalog_downloads/{id}/download','CatalogDownloadController@file_download');正规分销商有资格选择8条路线。
Route::get('distributors/{id}', array('before' =>'profile', 'uses'=>'DistributorController@show'));
Route::get('distributors/{id}/edit', 'DistributorController@edit');
Route::put('distributors/{id}/update', array('as'=>'distributors.update', 'uses'=>'DistributorController@update'));
Route::get('catalog_downloads','CatalogDownloadController@index');
Route::get('catalog_downloads/{id}/download','CatalogDownloadController@file_download');
Route::get('marketing_materials','MarketingMaterialController@index');
Route::get('marketing_materials/{id}/download/thumb_path','MarketingMaterialController@thumb_download');
Route::get('marketing_materials/{id}/download/media_path','MarketingMaterialController@media_download');码
问题
发布于 2014-12-02 18:06:54
首先:不可能声明导致相同的两次的路由。不管是集体的还是非团体的。(如果您有一个带有prefix的组,则有可能因为前缀更改到路由的URL )
您必须通过智能过滤来解决这个问题。
这是我想出的最简单的解决方案:
Route::filter('distributor', function(){
$user = Auth::user();
if($user->type == "Distributor"){
return true;
}
if (Request::ajax()){
return Response::make('Unauthorized', 404);
}
return View::make('errors.404_auth');
});
Route::filter('distributor.regular', function(){
$user = Auth::user();
if($user->type == "Distributor"){
if($user->distributor()->type != 'OEM'){
return true;
}
}
if (Request::ajax()){
return Response::make('Unauthorized', 404);
}
return View::make('errors.404_auth');
});distributor过滤器只检查用户是否属于Distributor类型。第二个过滤器,distributor.regular,检查分销商是否不是OEM。(如果您想知道,distributor.regular中的点没有特殊的功能或更深层次的含义。我只是喜欢这样写)
Route::group(['before' => 'distributor'], function(){
Route::get('distributors/{id}', array('before' =>'profile', 'uses'=>'DistributorController@show'));
Route::get('distributors/{id}/edit', 'DistributorController@edit');
Route::put('distributors/{id}/update', array('as'=>'distributors.update', 'uses'=>'DistributorController@update'));
Route::get('catalog_downloads','CatalogDownloadController@index');
Route::get('catalog_downloads/{id}/download','CatalogDownloadController@file_download');
Route::group(['before' => 'distributor.regular'], function(){
Route::get('catalog_downloads', 'CatalogDownloadController@index');
Route::get('catalog_downloads/{id}/download', 'CatalogDownloadController@file_download');
Route::get('marketing_materials', 'MarketingMaterialController@index');
Route::get('marketing_materials/{id}/download/thumb_path', 'MarketingMaterialController@thumb_download');
Route::get('marketing_materials/{id}/download/media_path', 'MarketingMaterialController@media_download');
});
});这应该已经适用于您发布的用例。然而,我们可以使过滤器更加灵活,也可以减少冗余代码。
function makeError404(){
if (Request::ajax()){
return Response::make('Unauthorized', 404);
}
return View::make('errors.404_auth');
}
Route::filter('distributor', function(){
$user = Auth::user();
if($user->type == "Distributor"){
return true;
}
return makeError404();
});
Route::filter('distributor.group', function($route, $request, $value){
$groups = explode(';', $value);
$user = Auth::user();
if($user->type == "Distributor"){
if(in_array($user->distributor()->type, $groups)){
return true;
}
}
return makeError404();
});现在我们可以动态地指定用户必须在哪个组中.
Route::group(['before' => 'distributor'], function(){
// distributor routes
Route::group(['before' => 'distributor.group:gold;silver;bronze'], function(){
// regular routes
});
});发布于 2014-11-27 14:56:46
你可以走这样一条路
class UserController extends BaseController {
/**
* Instantiate a new UserController instance.
*/
public function __construct()
{
$this->beforeFilter('employee', array('only' => 'index'));
}
}https://stackoverflow.com/questions/27173234
复制相似问题