Php 你能在控制器或路由中以同样的方式使用中间件吗?

Php 你能在控制器或路由中以同样的方式使用中间件吗?,php,laravel,laravel-blade,laravel-routing,Php,Laravel,Laravel Blade,Laravel Routing,我试图确保你不能只在顶部栏中键入/admin。我在用户表中增加了一列名为admin,它要么是0(普通用户)要么是1(管理员) 在刀片页面中,我正在检查: @if (Auth::check()) @if (Auth::user()->admin == 1) <p>Hello Admin</p> @else <p>Hello standard user</p> @endif @endif 或者在控制器中(类似于此的内容)

我试图确保你不能只在顶部栏中键入/admin。我在用户表中增加了一列名为
admin
,它要么是
0
(普通用户)要么是
1
(管理员)

在刀片页面中,我正在检查:

@if (Auth::check())
  @if (Auth::user()->admin == 1)
   <p>Hello Admin</p>
  @else
   <p>Hello standard user</p>
  @endif
@endif
或者在控制器中(类似于此的内容)


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

首先,通过在控制台中键入以下内容来创建新的中间件:

php artisan make:中间件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('/');
}
注意:中间件还将检查用户是否经过身份验证,以便可以代替管理员路由的身份验证,请记住修改返回以满足您的需要

Route::get('/home', 'HomeController@index')->name('home')->middleware('auth')-where('admin' 1); 
public function __construct()
{
   $this->middleware('auth')->where('admin' 1);
}
最后,将中间件添加到您的路由中,有许多方法可以做到这一点

  • 如果您计划使用它而不是身份验证中间件,只需在路由文件
    ->middleware('isAdmin')
  • 另一个选项是像这样修改路由文件

因此,您不需要将中间件应用于每条路由,这里有许多可能性

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

首先,通过在控制台中键入以下内容来创建新的中间件:

php artisan make:中间件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('/');
}
注意:中间件还将检查用户是否经过身份验证,以便可以代替管理员路由的身份验证,请记住修改返回以满足您的需要

Route::get('/home', 'HomeController@index')->name('home')->middleware('auth')-where('admin' 1); 
public function __construct()
{
   $this->middleware('auth')->where('admin' 1);
}
最后,将中间件添加到您的路由中,有许多方法可以做到这一点

  • 如果您计划使用它而不是身份验证中间件,只需在路由文件
    ->middleware('isAdmin')
  • 另一个选项是像这样修改路由文件
因此,您不需要将中间件应用于每条路线,这里有很多可能性