猿问

Laravel 策略自动检测

今天我正在创建 USER 个人资料页面,其中控制ProfileController将视图返回到个人资料页面、个人资料设置等。

所以我决定制定一些政策规则来编辑个人资料等。

所以我发现我应该使用基于 Laravel Doc 的中间件 / Gates / Policy 我选择 Policy 因为 profil 页面是公开的但只有它的特定部分可以作者编辑所以我需要@can

所以我的步骤:

  1. php artisan make:policy ProfilePolicy (无型号)

  2. 注册政策,AuthServiceProvider$policies财产

  3. 写的方法像edit里面ProfilePolicy

然后我开始思考如何将它定义给我的控制器嗯,文档对我没有帮助:/

所以我尝试了刀片@can('edit', $user)方法并且它起作用了,但是如何?,如何为一个控制器定义特定策略?(不是 Model ),如何为单个 Controller 定义多个 Policy

我失去了 laravel Magic 是如何做到这一点的,也许是因为命名?ProfileController => ProfilePolicy ?


慕婉清6462132
浏览 137回答 1
1回答

慕莱坞森

在控制器中你可以写这个public function edit(Profile $profile) {   $this->authorize('edit', $profile)}Laravel 这样做:检查 的类型$profile,它是一个Profile::class检查为该类注册的策略(您的第 2 步)查找该edit策略中的方法,如果未找到,则返回 false 表示用户未被授权执行edit()返回真/假的函数在blade中,@can指令做的事情完全一样。策略旨在绑定到模型,这是编写处理单个模型的规则的便捷方式,但它们可以通过多种方式触发(例如authorize()控制器中的方法和@can刀片中的指令)。
随时随地看视频慕课网APP
我要回答