我最近开始使用Laravel 5,我在实现一个不仅授权用户,还检查权限的系统方面遇到了很多麻烦。
在我在网上挖掘的所有例子中,我看到有两个项目被用作中间件。例如:
Route::group(['middleware' => ['auth', 'permissions']], function() {
// protected routes here
Route::get('admin', 'DashboardController@index');
});
然而,无论我做什么,我都无法工作。我只能将一个项目应用为中间件,例如:
Route::group(['middleware' => 'auth'], function() {
// protected routes here
Route::get('admin', 'DashboardController@index');
});
如果我申请两个,我收到错误“路由[管理员]未定义。”
我已经尝试了所有我能想到的东西,而且我正撞在一堵砖墙上。我怎么能在一条路线上应用两件或两件以上的中间件呢?
答案 0 :(得分:1)
您可能会尝试创建一个比验证更多的中间件吗?
在你的Kernel.php中你可能有类似的东西:
protected $routeMiddleware = [
'auth' => 'Your\Route\Authenticate',
'auth.permissions' => 'Your\Route\AuthenticateWithPermissions'
'permissions' => 'Your\Route\RedirectIfNoPermissions'
]
答案 1 :(得分:1)
我认为括号中有错误。您的代码应如下所示:
Route::group(['middleware' => ['auth', 'permissions'], function() {
// protected routes here
Route::get('admin', 'DashboardController@index');
}]);
检查结束括号......
答案 2 :(得分:1)
我正在回答我自己的问题,因为许多人都错过了提到解决方案的评论。
问题出现在权限中间件中,正如lukasgeiter发表的评论所述。
正如我的回复中所见,答案是在权限中间件中找到的,其中使用了:
return redirect()->route('admin');
而不是:
redirect('admin');
我的routes.php文件中的代码实际上没有任何问题。
答案 3 :(得分:1)
此错误路由[admin]未定义是因为未定义路径名称 admin 。
路线名称和路线路径是两回事。
您已将路径路径声明为admin,
Route::get('admin', 'DashboardController@index');
然而,
return redirect()->route('admin');
表示您将流重定向到名为 admin 的路径。
要对错误进行排序,
在下面定义的数组中使用以下内容定义路径名称 admin
'as' => 'route_name'
。
解决方案:
Route::get('admin', [
'as' => 'admin',
'uses' => 'DashboardController@index'
]);
答案 4 :(得分:0)
您可以使用此class。
就我而言,您需要为您的群组设置角色类型权限:
Route::group(['middleware' => ['auth', 'permissions'], 'permissions' =>['Admin','Other']], function(){
//Your Routes
}