Laravel 使用单个策略方法覆盖资源上的每个操作
我有一个名为Laravel 使用单个策略方法覆盖资源上的每个操作,laravel,authorization,Laravel,Authorization,我有一个名为Post的资源。每个帖子都与单个用户相关,一个用户可能有多篇(或零篇)帖子 我正在使用Route::resource将Post资源上每个可能操作的路由映射到单个资源控制器PostController 现在,我希望为Post资源实现一个策略。为了使一切尽可能简单和简单,我想制定如下政策: 每个用户都有权执行任何不需要现有Post(例如创建)的操作 用户仅被授权访问其自己的帖子,用于访问帖子(例如编辑、更新、删除)的每个操作 我现在要做的是创建一个名为access的策略方法,它将检查
Post
的资源。每个帖子
都与单个用户
相关,一个用户
可能有多篇(或零篇)帖子
我正在使用Route::resource
将Post
资源上每个可能操作的路由映射到单个资源控制器PostController
现在,我希望为Post
资源实现一个策略。为了使一切尽可能简单和简单,我想制定如下政策:
- 每个用户都有权执行任何不需要现有
(例如创建)的操作Post
仅被授权访问其自己的用户
,用于访问帖子
(例如编辑、更新、删除)的每个操作帖子
access
的策略方法,它将检查Post
是否由用户拥有。然后,在我的PostController
中,每个参数中包含Post
对象的方法(例如edit(Post$Post)
)都将以
$this->authorize('access',$post)代码>
但是,我不喜欢这样,我需要手动放置这些行。如果我忘了其中一个,我会在那里有一个安全漏洞
另一方面,我有authorizeResource
方法,它使授权自动进行,但要求策略具有多个方法,以便将它们映射到控制器的每个方法。另外,我尝试使用,但没有成功(可能是因为我在Route::resource
映射中使用了它)
问题是:实现我所描述的结果(即授权使用完全相同规则访问资源的所有可能操作)的最干净、更安全的方法是什么?您可以使用authorizeResource()
并覆盖控制器中的resourceAbilityMap()
方法。后一种方法返回从控制器方法到将被调用的策略方法的映射
例如
您可以使用authorizeResource()
并覆盖控制器中的resourceAbilityMap()
方法。后一种方法返回从控制器方法到将被调用的策略方法的映射
例如
class MyController extends Controller
{
// ...
/**
* Get the map of resource methods to ability names.
*
* @return array
*/
protected function resourceAbilityMap()
{
return [
'edit' => 'access',
'update' => 'access',
'destroy' => 'access',
];
}
// ...
}