为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 策略自动检测

Laravel 策略自动检测

PHP
慕婉清6462132 2021-06-30 14:15:53
今天我正在创建 USER 个人资料页面,其中控制ProfileController将视图返回到个人资料页面、个人资料设置等。所以我决定制定一些政策规则来编辑个人资料等。所以我发现我应该使用基于 Laravel Doc 的中间件 / Gates / Policy 我选择 Policy 因为 profil 页面是公开的但只有它的特定部分可以作者编辑所以我需要@can所以我的步骤:php artisan make:policy ProfilePolicy (无型号)注册政策,AuthServiceProvider在$policies财产写的方法像edit里面ProfilePolicy然后我开始思考如何将它定义给我的控制器嗯,文档对我没有帮助:/所以我尝试了刀片@can('edit', $user)方法并且它起作用了,但是如何?,如何为一个控制器定义特定策略?(不是 Model ),如何为单个 Controller 定义多个 Policy我失去了 laravel Magic 是如何做到这一点的,也许是因为命名?ProfileController => ProfilePolicy ?
查看完整描述

1 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

在控制器中你可以写这个


public function edit(Profile $profile) {

   $this->authorize('edit', $profile)

}

Laravel 这样做:

  • 检查 的类型$profile,它是一个Profile::class

  • 检查为该类注册的策略(您的第 2 步)

  • 查找该edit策略中的方法,如果未找到,则返回 false 表示用户未被授权

  • 执行edit()返回真/假的函数

在blade中,@can指令做的事情完全一样。

策略旨在绑定到模型,这是编写处理单个模型的规则的便捷方式,但它们可以通过多种方式触发(例如authorize()控制器中的方法和@can刀片中的指令)。


查看完整回答
反对 回复 2021-07-09
  • 1 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号