美文网首页
中间件(middleware)和授权策略(Policy)

中间件(middleware)和授权策略(Policy)

作者: Jason_lai | 来源:发表于2018-04-21 21:41 被阅读0次

中间件的创建

1. 使用命令创建中间件

php artisan make:middleware CheckIFVerify
  • 执行以上命令会在“App\Http\Middleware\”文件创建CheckIFVerify.php
  • CheckIFVerify.php文件中有handle()方法,在此方法中编写校验规则
//可以使用$request->user()获取当前登录对象。使用$request->user()->email获取当前对象属性值。
public function handle($request, Closure $next)
{
      //返回下个中间件
      return $next($request);
}

2.注册中间件

  • 中间件只有注册之后才能使用
  • 注册是在"App\Http\kernel.php"文件中的$routeMiddleware属性中
protected $routeMiddleware = [
  //  ‘中间名称’ => 中间件路径
  ‘CheckIFEmail’ => App\Http\Middleware\CheckIFVerify::class,
  ];

中间件使用

1.在路由中使用

Route::get(['middleware' => 'CheckIFEmail'],function(){
  //在此写需要经过中间件校验的路由

});

2.在控制器中的__construct方法中写:

public function __construct()
{
  $this->middleware('中间件名称',[
      'except' => ['show','create','store']
  ]);
{
  • 中间件是在控制器的构造器方法中调用,middleware方法接收两个参数
    1. 中间件名称
    2. 过滤方法名称的数组(except是除那些方法不用使用中间件过滤,还有与之相反作用的only方法)
    3. 指定一些只允许未登录用户访问的动作,通过设置guest属性
     public function __construct()
     {
         $this->middleware('guest', [
             'only' => ['create']
         ]);
     }
    

授权策略的作用

  • 当用户完成登录之后,要限制已登录用户操作其他用户的信息

授权策略的使用

  • 可以使用命令生成授权策略类文件

php artisan make:policy Userpolicy

  • 授权策略文件存放在app\Policies文件夹下
  • 在授权策略文件中定义方法(此方法中不用传第一个参数,框架会自动加载当前登录用户)
  public function update(User $currentUser, User $user)
    {
        return $currentUser->id === $user->id;
    }
  • 在AuthServiceProvider(app/Providers)类中对授权策略设置,在policies属性中指定授权策略,例如:
protected $policies = [
        'App\Model' => 'App\Policies\ModelPolicy',
        \App\Models\User::class  => \App\Policies\UserPolicy::class,
    ];
  • 在控制器中是用授权策略方法
$this->authorize('update',$user);

相关文章

网友评论

      本文标题:中间件(middleware)和授权策略(Policy)

      本文链接:https://www.haomeiwen.com/subject/urgbvxtx.html