Laravel验证简记
来源:互联网 发布:高中文言文朗读软件 编辑:程序博客网 时间:2024/06/05 19:50
被这个鬼玩意整了一个下午了,真的是那句我有句妈卖批一定要说!!!现在来这里整理一下。
首先是两个知识点!
- 中间件
- 授权
这两个玩意有什么用呢?中间件就像是门卫,当你通过路由访问一个类时,如果在这个类内置设置有中间件,则你必须要先去访问那个中间件。就像情侣准备结婚一样,如果女方说你必须先见见她家长,那么你就一定要去见见她家长。女方是你希望访问的最终控制器与方法,而中间件就是她的家长。至于她的家长希望你和她的关系如何,那就看具体代码吧。
授权操作呢?有点像见过她的父母后,她的父母给你开出的条件,比如:房子、车子啊之类的才准你们结婚,简单点来说就是:“小伙子,我看你也是好小伙子,把我女儿托付给你我们俩老也放心,但是我们不希望我们闺女受苦,所以你需要做到以下几点,否则你不能和我女儿做到以下几件是。”然后你的岳父拿着对话框给你画了一个表格。
总结来说就是:
- 中间件是大门,进了大门不代表就是女婿,但是连大门都进不了,那么肯定连机会都没有了
- 授权是要求,是针对只是当男朋友还是当老公,具体到控制器下的对应各个方法的一个限制
下面讲解具体的操作,我的laravel版本是5.4.20。
中间件
我看到的例子是在该控制器的__construct中设置了中间件:
<?phppublic 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
相反的操作expect
,expect=>['edit','update']
,表示除了edit和update
之外的都使用中间件进行匹配。
如何自定义中间件
I don’t know …..
教程上没有,而光弄懂这个东西,就花了我一个下午了,之后回来补吧。
授权
首先你可以直接使用命令行来创建一个授权文件:
# 在项目的根目录下运行下面的命令,所谓根目录就是你的artisan文件所在的那个路径php artisan make:policy PolicyFileName
如我要创建一个UserPolicy.php
,那么我就运行:
php artisan make:policy UserPolicy
之后就会在app/Http/Policies
下创建一个新的文件,这里顺道把那个文件代码贴一下:
<?phpnamespace 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 ];
注意对User
和UserPolicy
的命名空间的设置,否则会显示查不到该文件。
调用该授权类
在UserPolicy.php
中只需要直接调用:
$user=User::findOrFail($id);$this->authorize('update',$user);
就能进行验证,这里的update
就是我们上面创建的UserPolicy.php
中设置的方法,只有在里面设置了的方法才能在对应的控制器中被调用。
如何被调用到的?
其中我们直接是写了$this->authorize()
就显式的调用到了这个类。将两者联系在一起的就是最开始配置的AuthServiceProvider.php文件,其中把模型:User和UserPolicy进行了匹配,所以当进行user模型的操作时,自动调用UserPolicy进行授权验证。
- Laravel验证简记
- Laravel 门面类:Facade简记
- Laravel 验证
- laravel数据验证
- Laravel 4 验证
- laravel validator 表单验证
- laravel 验证码
- Laravel验证码类
- laravel 表单验证 (入门)
- Laravel-csrf验证错误
- laravel CURD,正则验证
- laravel表单验证
- laravel拓展validator验证
- laravel表单验证
- laravel中的验证码
- Laravel 表单验证功能
- laravel validator验证
- Laravel的表单验证
- 项目记录
- eXtremeDb solution to Invalid multibyte string
- java实现在线预览----poi操作excel转html及03、07版本兼容问题
- Structured Streaming 之窗口事件时间聚合操作
- 欢迎使用CSDN-markdown编辑器
- Laravel验证简记
- mysql mapper 参数判断
- mybatis使用pagehelper分页报错java.lang.ClassCastException: com.github.pagehelper.PageHelper cannot be cast
- ce
- How to lookup django session for a particular user?
- 设计模式 外观模式 一键电影模式
- 一个函数作为另一个函数的参数
- 802.11无线网络学习(二):802.11 网络概论
- 51nod 1055 最长等差数列