【发布时间】:2019-03-16 20:55:28
【问题描述】:
我有一个名为 Post 的资源。每个Post 都与一个User 相关,一个User 可能有多个(或零个)Posts。
我正在使用Route::resource 将Post 资源上每个可能操作的路由映射到单个资源控制器PostController。
现在,我希望为Post 资源实施一项政策。为了使一切尽可能简单和万无一失,我想制定如下政策:
- 每个用户都有权执行任何不需要现有
Post的操作(例如创建)。 - 对于访问
Post的每个操作(例如编辑、更新、删除),User仅被授权访问其自己的Posts。
我现在要做的是创建一个名为access 的单一策略方法,它将检查Post 是否由User 拥有。然后,在我的PostController 中,每个参数中包含Post 对象的方法(例如edit(Post $post))都将以
$this->authorize('access', $post);
但是,我不喜欢我需要手动放置这些行。如果我忘记了其中一个,我就会有一个安全漏洞。
另一方面,我有authorizeResource 方法,它可以自动进行授权,但要求策略具有多个方法,以便将它们映射到控制器的每个方法。另外,我尝试使用Authorize/can middleware,但没有成功(可能是因为我在Route::resource 映射上使用了它)。
问题是:实现我所描述的结果的最干净、更安全的方法是什么(即授权使用完全相同的规则访问资源的所有可能操作)?
【问题讨论】:
标签: laravel authorization