您可以在控制器或路由中以相同的方式使用中间件吗?
Can U use the middleware the same way in the controller or route?
我试图确保您不能只在顶部栏中输入 /admin。我在用户 table 中创建了一个名为 admin
的额外列,它是 0
(普通用户)或 1
(管理员)。
在 blade 页面中,我正在检查:
@if (Auth::check())
@if (Auth::user()->admin == 1)
<p>Hello Admin</p>
@else
<p>Hello standard user</p>
@endif
@endif
我问的是是否可以检查路线(类似这样的事情)
Route::get('/home', 'HomeController@index')->name('home')->middleware('auth')-where('admin' 1);
或者在控制器中(类似这样的东西)
public function __construct()
{
$this->middleware('auth')->where('admin' 1);
}
您可以使用新的中间件实现此目的。
首先通过在控制台中输入来创建一个新的中间件:
php artisan make:middleware isAdmin
随便命名你的中间件,isAdmin 在这里很常见。
接下来,您必须将中间件添加到位于 app/Http/Kernel.php 的 Kernel.php,编辑名为 $routeMiddleware
的数组并添加以下内容:
'isAdmin' => \App\Http\Middleware\IsAdmin::class,
打开位于中间件文件夹中的 IsAdmin.php 并修改 handle 方法,如下所示:
{
if (Auth::user() && Auth::user()->admin == 1) {
return $next($request);
}
return redirect('/');
}
注意:中间件还会检查用户是否经过身份验证,因此可以用来代替管理路由的身份验证,请记住修改 return 以满足您的需要
最后,将中间件添加到您的路由中,有多种方法可以做到这一点。
- 如果您打算使用它而不是 auth 中间件,只需在您的路由文件中将 auth 更改为 isAdmin
->middleware('isAdmin')
- 另一种选择是像这样修改你的路由文件
Route::group(['middleware => 'auth'], function () {
Route::get('/home', 'HomeController@index')->name('home')->middleware('isAdmin');
}
所以你不需要将中间件应用到每个路由,这里有很多可能性https://laravel.com/docs/7.x/middleware#assigning-middleware-to-routes
我试图确保您不能只在顶部栏中输入 /admin。我在用户 table 中创建了一个名为 admin
的额外列,它是 0
(普通用户)或 1
(管理员)。
在 blade 页面中,我正在检查:
@if (Auth::check())
@if (Auth::user()->admin == 1)
<p>Hello Admin</p>
@else
<p>Hello standard user</p>
@endif
@endif
我问的是是否可以检查路线(类似这样的事情)
Route::get('/home', 'HomeController@index')->name('home')->middleware('auth')-where('admin' 1);
或者在控制器中(类似这样的东西)
public function __construct()
{
$this->middleware('auth')->where('admin' 1);
}
您可以使用新的中间件实现此目的。
首先通过在控制台中输入来创建一个新的中间件:
php artisan make:middleware isAdmin
随便命名你的中间件,isAdmin 在这里很常见。
接下来,您必须将中间件添加到位于 app/Http/Kernel.php 的 Kernel.php,编辑名为 $routeMiddleware
的数组并添加以下内容:
'isAdmin' => \App\Http\Middleware\IsAdmin::class,
打开位于中间件文件夹中的 IsAdmin.php 并修改 handle 方法,如下所示:
{
if (Auth::user() && Auth::user()->admin == 1) {
return $next($request);
}
return redirect('/');
}
注意:中间件还会检查用户是否经过身份验证,因此可以用来代替管理路由的身份验证,请记住修改 return 以满足您的需要
最后,将中间件添加到您的路由中,有多种方法可以做到这一点。
- 如果您打算使用它而不是 auth 中间件,只需在您的路由文件中将 auth 更改为 isAdmin
->middleware('isAdmin')
- 另一种选择是像这样修改你的路由文件
Route::group(['middleware => 'auth'], function () {
Route::get('/home', 'HomeController@index')->name('home')->middleware('isAdmin');
}
所以你不需要将中间件应用到每个路由,这里有很多可能性https://laravel.com/docs/7.x/middleware#assigning-middleware-to-routes