你可以在控制器或路由中以相同的方式使用中间件吗?
Posted
技术标签:
【中文标题】你可以在控制器或路由中以相同的方式使用中间件吗?【英文标题】:Can U use the middleware the same way in the controller or route? 【发布时间】:2020-10-28 06:03:31 【问题描述】:我正在努力确保您不能只在顶部栏中键入 /admin。我在用户表中添加了一个名为admin
的列,它是0
(普通用户)或1
(管理员)。
在刀片页面中,我正在检查:
@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);
【问题讨论】:
【参考方案1】:您可以使用新的中间件来实现这一点。
首先通过在控制台中输入来创建一个新的中间件:
php artisan make:middleware isAdmin
为你的中间件命名你喜欢的名字,isAdmin 在这里很常见。
接下来,您必须将中间件添加到位于 app/Http/Kernel.php 的 Kernel.php,编辑名为 $routeMiddleware
的数组并添加以下内容:
'isAdmin' => \App\Http\Middleware\IsAdmin::class,
打开位于中间件文件夹中的 IsAdmin.php 并修改句柄方法,如下所示:
if (Auth::user() && Auth::user()->admin == 1)
return $next($request);
return redirect('/');
注意:中间件还会检查用户是否经过身份验证,因此可以代替 auth 用于管理路由,请记住修改返回以满足您的需要
最后,将中间件添加到您的路由中,有很多方法可以做到这一点。
如果您打算使用它而不是 auth 中间件,只需在您的路由文件->middleware('isAdmin')
中将 auth 更改为 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
【讨论】:
以上是关于你可以在控制器或路由中以相同的方式使用中间件吗?的主要内容,如果未能解决你的问题,请参考以下文章