Laravel 策略自动检测
Laravel policy autodetect
今天我正在创建 USER 个人资料页面,它在 ProfileController
中进行控制,它返回对个人资料页面、个人资料设置等的视图
所以我决定制定一些政策规则来编辑个人资料等
所以我发现我应该使用 Middleware / Gates / Policy,基于 Laravel Doc 我选择了 Policy 因为 profil 页面是 public 但只有它的特定部分可以作者编辑所以我需要 @可以
所以我的步骤:
php artisan make:policy ProfilePolicy
(无模型)
- 已在
$policies
属性 中将政策注册到 AuthServiceProvider
- 在
ProfilePolicy
里面写了像edit
这样的方法
然后我开始考虑如何将它定义到我的控制器嗯,文档对我没有帮助:/
所以我尝试了 blade @can('edit', $user)
方法并且它有效,但是 HOW ?如何为一个控制器定义特定策略? (不是模型),如何为单个控制器定义多个策略
我不知道 laravel Magic 是如何做到这一点的,也许是因为命名?配置文件控制器 => 配置文件策略?
在控制器中你可以这样写
public function edit(Profile $profile) {
$this->authorize('edit', $profile)
}
Laravel 这样做:
- 检查
$profile
的类型,是Profile::class
- 检查为 class(您的第 2 步)注册的政策
- 在该策略中查找
edit
方法,如果未找到,return false 表示用户 未 授权
- 执行 returns true/false
的 edit()
函数
在 blade 中,@can
指令做同样的事情。
策略是为了绑定到模型,这是一种编写规则来处理单个模型的便捷方式,但它们可以通过多种方式触发(例如控制器中的 authorize()
方法和 @can
中的指令 blade).
今天我正在创建 USER 个人资料页面,它在 ProfileController
中进行控制,它返回对个人资料页面、个人资料设置等的视图
所以我决定制定一些政策规则来编辑个人资料等
所以我发现我应该使用 Middleware / Gates / Policy,基于 Laravel Doc 我选择了 Policy 因为 profil 页面是 public 但只有它的特定部分可以作者编辑所以我需要 @可以
所以我的步骤:
php artisan make:policy ProfilePolicy
(无模型)- 已在
$policies
属性 中将政策注册到 - 在
ProfilePolicy
里面写了像
AuthServiceProvider
edit
这样的方法
然后我开始考虑如何将它定义到我的控制器嗯,文档对我没有帮助:/
所以我尝试了 blade @can('edit', $user)
方法并且它有效,但是 HOW ?如何为一个控制器定义特定策略? (不是模型),如何为单个控制器定义多个策略
我不知道 laravel Magic 是如何做到这一点的,也许是因为命名?配置文件控制器 => 配置文件策略?
在控制器中你可以这样写
public function edit(Profile $profile) {
$this->authorize('edit', $profile)
}
Laravel 这样做:
- 检查
$profile
的类型,是Profile::class
- 检查为 class(您的第 2 步)注册的政策
- 在该策略中查找
edit
方法,如果未找到,return false 表示用户 未 授权 - 执行 returns true/false 的
edit()
函数
在 blade 中,@can
指令做同样的事情。
策略是为了绑定到模型,这是一种编写规则来处理单个模型的便捷方式,但它们可以通过多种方式触发(例如控制器中的 authorize()
方法和 @can
中的指令 blade).