php - 如何在 Laravel 上使用多个中间件组?
问题描述
我正在尝试将路由的访问限制在我使用 Laravel 5.7 编写的站点中的某些类型的用户,现在我正在尝试使用中间件来实现。
对于每个用户的级别,我都有一个带有此代码的中间件(类型有所不同):
public function handle($request, Closure $next)
{
if(Auth::user()->type==3)
return $next($request);
else
return redirect()->route('dashboard');
}
在kernel.php文件中,我将它们写成这样:
protected $routeMiddleware = [
...
'teacher' => \App\Http\Middleware\RedirectIfTeacher::class,
...
]
在我的应用程序中,每个用户都有一个级别,从 1 到 5,但每个级别都有单独的视图和一些共享视图,但我无法为不止一种类型的用户重定向视图,因为我不能当我在与两种以上类型的用户共享的路由(或路由)上使用多个中间件时,它们会起作用。
当我尝试时,它只是忽略第二个或更多中间件并重定向到路由仪表板,如果用户类型无法进入所需的视图,这是重定向的路由。
现在我已经尝试过使用这段代码:
Route::group(['middleware' => ['administrator','teacher','student']], function(){
并使用此代码:
Route::group(['middleware' => ['administrator' OR 'teacher' OR 'student']], function(){
我也尝试过这种风格:
Route::group(['middleware' => ['administrator|teacher|student']], function(){
没有任何运气,我做错了什么吗?还是有更好的方法来做我想要实现的目标,在此先感谢!
解决方案
我正在使用下面的代码并且它有效:
Route::group(['middleware' => ['administrator','teacher','student']], function() {});
1 在 kernel.php 文件中,您是否获得了分配给中间件的所有键?例如:
protected $routeMiddleware = [
...
'administrator' => \App\Http\Middleware\RedirectIfAdmin::class,
'teacher' => \App\Http\Middleware\RedirectIfTeacher::class,
'student' => \App\Http\Middleware\RedirectIfStudent::class,
...
]
2 尝试在句柄()中的 if 之前检查用户变量。
dd(Auth::user()->type);
推荐阅读
- android - ImageView 滑块中的 MediaPlayer 释放问题
- angular - 如何使用 Angular 9 中的 Angular 材料制作持久对话框(模态框)?
- php - 从 MySQL 字段中拆分记录
- javascript - 这个对 WeatherApi 的请求有什么问题
- python - Is it possible to use request.POST as a dictionary input?
- c++ - file.open 不在 C++ 中创建新文件
- javascript - 如何在角度 8 中从一个组件访问另一个组件的 div id
- javascript - 在 D3.js 中使用带有转换的回调函数
- javascript - 我是否必须在 React with typescript 中的可重用输入上声明占位符?
- javascript - 从变量中获取对象元素