我对使用Laravel中的策略类的最佳方式感到困惑。
假设我有一个User
和一个Post
,我在更新检查User
拥有帖子的帖子时有一个政策方法。
我应该在从数据库加载后立即将Post
对象传递给authorize
方法吗?或者,一旦我更新了可填写的值?
我的问题是,如果user_id
上的Post
更改,则授权方法将允许用户更改帖子,即使他们不拥有帖子,也可以允许他们更改用户对其他人,意味着他们无法访问它。
这是否意味着我需要在更新其值之前和之后调用$this->authorize('update', $post)
?
$post = Post::findOrFail($id);
$this->authorize('update', $post); // Should I call it here
$post->fill($request->input());
$this->authorize('update', $post); // Or here? Or, both places?
或者,我是否应该使用请求验证来确保用户无法输入他们无法访问的实体的ID?
答案 0 :(得分:1)
您需要在更新值之前调用$ this-> authorize('update',$ post)
$post = Post::findOrFail($id);
$this->authorize('update', $post); // throw a HttpException if the action is not authorized
$post->fill($request->input());
来源:https://laravel.com/docs/5.2/authorization#controller-authorization