【问题标题】: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);
}

【问题讨论】:

    标签: php laravel laravel-blade laravel-routing


    【解决方案1】:

    您可以使用新的中间件来实现这一点。

    首先通过在控制台中输入来创建一个新的中间件:

    php artisan make:middleware isAdmin

    为你的中间件命名你喜欢的名字,isAdmin 在这里很常见。

    接下来,您必须将中间件添加到位于 app/Http/Kernel.php 的 Kernel.php,编辑名为 $routeMiddleware 的数组并添加以下内容:

    'isAdmin' =&gt; \App\Http\Middleware\IsAdmin::class,

    打开位于中间件文件夹中的 IsAdmin.php 并修改句柄方法,如下所示:

    {
         if (Auth::user() &&  Auth::user()->admin == 1) {
                return $next($request);
         }
    
        return redirect('/');
    }
    

    注意:中间件还会检查用户是否经过身份验证,因此可以代替 auth 用于管理路由,请记住修改返回以满足您的需要

    最后,将中间件添加到您的路由中,有很多方法可以做到这一点。

    • 如果您打算使用它而不是 auth 中间件,只需在您的路由文件 -&gt;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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 2021-12-20
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多