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

中间件的创建

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)作为Http请求(Request)和Http响应(Response)之间的中间人,本...
    JunChow520阅读 2,659评论 0 1
  • 1、第八章 Samba服务器2、第八章 NFS服务器3、第十章 Linux下DNS服务器配站点,域名解析概念命令:...
    哈熝少主阅读 3,771评论 0 10
  • 本人眼拙,对于本书作者公孙策了解尚浅。直接切入主题吧。 ①正所谓,遇事时聪明的人把血液聚集在头脑,以便冷静的思考问...
    春风凉意阅读 345评论 0 1
  • 多少年以后,你是否还会记得这个阳光的午后?
    兔子前辈阅读 368评论 0 1
  • “每个背井离乡的人,都是一个梦想家,但是梦碎了,就只剩下想家了” 网上看到的一句话,那一瞬间,心里泛着酸楚。 昨天...
    丶呆猴阅读 314评论 0 0