Laravel验证简记

33 篇文章 0 订阅

被这个鬼玩意整了一个下午了,真的是那句我有句妈卖批一定要说!!!现在来这里整理一下。

首先是两个知识点!

  • 中间件
  • 授权

这两个玩意有什么用呢?中间件就像是门卫,当你通过路由访问一个类时,如果在这个类内置设置有中间件,则你必须要先去访问那个中间件。就像情侣准备结婚一样,如果女方说你必须先见见她家长,那么你就一定要去见见她家长。女方是你希望访问的最终控制器与方法,而中间件就是她的家长。至于她的家长希望你和她的关系如何,那就看具体代码吧。

授权操作呢?有点像见过她的父母后,她的父母给你开出的条件,比如:房子、车子啊之类的才准你们结婚,简单点来说就是:“小伙子,我看你也是好小伙子,把我女儿托付给你我们俩老也放心,但是我们不希望我们闺女受苦,所以你需要做到以下几点,否则你不能和我女儿做到以下几件是。”然后你的岳父拿着对话框给你画了一个表格。

总结来说就是:

  • 中间件是大门,进了大门不代表就是女婿,但是连大门都进不了,那么肯定连机会都没有了
  • 授权是要求,是针对只是当男朋友还是当老公,具体到控制器下的对应各个方法的一个限制

下面讲解具体的操作,我的laravel版本是5.4.20

中间件

我看到的例子是在该控制器的__construct中设置了中间件:

<?php
public function __construct(){
    $this->middleware('auth',['only'=>['edit','update']])
}
?>

上面这个设置是神马意思呢?$this->middleware()Laravel内置的一个方法,用于设置中间件的调用的。auth是要调用的中间件的名字,该名字和具体文件的映射关系被保存在app/Http/Kernel.php中,该文件中有这么一句话:

'auth' => \Illuminate\Auth\Middleware\Authenticate::class,

所以这里就是调用了这个内置类,这个内置类的其中一个默认操作就是当未登录状态时(Auth::login()进行判断),去访问后面设置的方法,则默认跳转到login路由中。至于你把login路由连接到哪里了,那就看你代码的具体情况了。

最后是only=>['edit','update'],这里表示仅当你访问这两个方法的时候,才会进行中间件的验证,其余方法随便,还有一个与only相反的操作expectexpect=>['edit','update'],表示除了edit和update之外的都使用中间件进行匹配。

如何自定义中间件

I don’t know …..

教程上没有,而光弄懂这个东西,就花了我一个下午了,之后回来补吧。

授权

首先你可以直接使用命令行来创建一个授权文件:

# 在项目的根目录下运行下面的命令,所谓根目录就是你的artisan文件所在的那个路径
php artisan make:policy PolicyFileName

如我要创建一个UserPolicy.php,那么我就运行:

php artisan make:policy UserPolicy

之后就会在app/Http/Policies下创建一个新的文件,这里顺道把那个文件代码贴一下:

<?php

namespace App\Policies;

use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;

class UserPolicy
{
    use HandlesAuthorization;

    public function update(User $currentUser,User $user){
      return $currentUser->id===$user->id;
    }
    // public function edit(User $currentUser,User $user){
    //   return $currentUser->id===$user->id;
    // }
}

现在文件授权文件创建好了,剩下还有一个文件要修改。

AuthServiceProvider.php

这个文件的路径是:app\Providers下,在其中把我们新建的这个授权文件添加进去:

protected $policies = [
        'App\Model' => 'App\Policies\ModelPolicy',
        //这里就是我们新加的内容
        User::class=>UserPolicy::class
    ];

注意对UserUserPolicy的命名空间的设置,否则会显示查不到该文件。

调用该授权类

UserPolicy.php中只需要直接调用:

$user=User::findOrFail($id);
$this->authorize('update',$user);

就能进行验证,这里的update就是我们上面创建的UserPolicy.php中设置的方法,只有在里面设置了的方法才能在对应的控制器中被调用。

如何被调用到的?

其中我们直接是写了$this->authorize()就显式的调用到了这个类。将两者联系在一起的就是最开始配置的AuthServiceProvider.php文件,其中把模型:User和UserPolicy进行了匹配,所以当进行user模型的操作时,自动调用UserPolicy进行授权验证。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值