我在laravel中有一个Route组,其中间件为auth
Route::group(['middleware'=>'auth', function()
{
//Routes
});
现在这些路线仅供登录用户使用。我有一种情况,登录用户有权限。我有一些只有登录用户才能访问的路由,如果他们有OWNER
的特权
在功能中,我已启动会话并存储了权限值。
我做了类似的事
Route::group(['middleware'=>'auth', function()
{
//Routes
if(session::get('privilege')
{
//Routes
}
});
这不适用于任何适当的方法。谁能告诉我如何在中间件中添加中间件?
答案 0 :(得分:1)
您需要创建一个名为OWNER
php artisan make:middleware Owner
将为您创建一个中间件文件。
然后在名为public function
的{{1}}中,您可以执行类似
handle
所以最后你的自定义中间件看起来像这样:
if (Auth::user()->privilege == "OWNER") {
return $next($request);
}
return redirect('home');
}
答案 1 :(得分:1)
您的路线文件中应该没有逻辑 - 这些应该只是定义路线而不是其他任何东西。你应该做的是定义中间件来验证你的用户拥有的权限/角色,你可以指定传递给中间件的参数,如下所示:
Route::group(['middleware' => 'auth', function() {
Route::get('/my-route', 'Controller@method')->middleware('role:some_role');
Route::get('/my-other-route', 'Controller@otherMethod')->middleware('role:some_other_role');
});
然后在中间件中,您可以通过handle
方法中的第三个参数访问该参数。使用该值,您可以验证用户拥有的特权/角色,然后确定用户是否应该访问该路由:
public function handle($request, Closure $next, $role)
{
// Do something with $role
return $next($request);
}
如果您不确定如何定义自己的自定义中间件,请查看以下文档:https://laravel.com/docs/middleware