今天,我在ProfileController
中创建了USER个人资料页面,并将其返回到个人资料页面,个人资料设置等。
所以我决定制定一些政策规则来编辑个人资料等。
所以我发现我应该使用基于Laravel Doc的Middleware / Gates / Policy,我选择Policy是因为profil页面是公开的,但是只有其中的特定部分可以作者编辑,所以我需要@can
所以我的步骤:
php artisan make:policy ProfilePolicy
(无模型)AuthServiceProvider
属性中向$policies
注册的策略edit
内部编写了ProfilePolicy
之类的方法然后我开始考虑如何将其定义为控制器hmmm,文档并不能帮助我:/
所以我尝试了刀片@can('edit', $user)
方法,它可以工作,但是 HOW 吗?如何为一个Controller定义特定策略? (不是模型),如何为单个控制器定义多个策略
我可能由于命名而失去了Laravel Magic如何做到这一点? ProfileController => ProfilePolicy?
答案 0 :(得分:0)
在控制器中,您可以编写此代码
public function edit(Profile $profile) {
$this->authorize('edit', $profile)
}
Laravel这样做:
$profile
的类型,它是Profile::class
edit
方法,如果未找到,则返回false,表示用户未获得 的授权edit()
函数,该函数返回true / false 在刀片中,@can
指令执行完全相同的操作。
策略应与模型绑定,这是一种编写规则以处理单个模型的便捷方法,但是它们可以通过多种方式触发(例如控制器中的authorize()
方法和@can
指令)在刀片中)。