【发布时间】:2016-08-25 13:54:36
【问题描述】:
目前,我正在使用 Cakephp 3 的 CRUD v4 插件。对于我的用户控制器中的编辑功能,重要的是只有用户本身才能更改他或她的凭据。我想通过从身份验证组件中插入用户 ID 来实现这一点。以下控制器方法:
public function edit($id = null){
$this->Crud->on('beforeSave', function(\Cake\Event\Event $event) {
$event->subject()->entity->id = $this->Auth->user('id');
});
return $this->Crud->execute();
}
如何确保不需要通过 url 提供 id?标准实现需要这样的 url:http://domain.com/api/users/edit/1.json 通过 PUT 请求。我想要做的是用户只需填写 http://domain.com/api/users/edit.json 并发送一个 JSON 正文。
我已经尝试了几件事:
- $id = null 给定参数时,如上例所示。如果在 url 中不提供任何 id,这将引发 404 错误,这是由 FindMethodTrait.php 中的 _notFound 方法引起的
- 使用 beforeFind 而不是 beforeSave。这也不起作用,因为这不是编辑功能的合适方法。
- 只提供一个数据库中不存在的随机 ID。这将通过 404 错误。我认为这是最重要的迹象(与第 1 点相结合)表明有问题。由于我尝试覆盖此值,因此 CRUD 插件不允许我以完全忽略插入值的方式执行此操作(覆盖 $event->subject()->entity->id)。李>
- 尝试通过http://domain.com/api/users.json 使用PUT 访问方法。这将尝试将操作路由到 index 方法。
- 只需检查几项:我的 AppController 中使用了 controllerTrait,并且没有禁用 crud 编辑功能。
有谁知道我在这里做错了什么?这是一个错误吗?
【问题讨论】:
-
你设置了什么样的授权?
-
如果您在 auth 组件中使用控制器授权,那么您应该检查用户是否与 url id 匹配?您是否有理由要从 url 中删除 id?
-
@chrisShick 我正在使用 JWT 有效负载的无状态身份验证。我想从 url 中删除 id 的原因是,应该从身份验证组件中检索用户 id。通过这种方式,我想强制用户只能更改他或她的凭据,而不是所有人。
标签: cakephp cakephp-3.0 crud