Cakephp 3 - CRUD 插件 - 使用 auth 组件的 id

Cakephp 3 - CRUD plugin - Use id from auth component

目前,我正在使用 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 through PUT request. What I want to do is that a user can just fill in http://domain.com/api/users/edit.json 并发送一个 JSON 正文。

我已经尝试了几种方法:

有谁知道我在这里做错了什么?这是一个错误吗?

我个人会使用Auth组件中的controller authorize来防止任何人更新别人的信息。这样你就不必更改 crud 代码。像这样的……

将此行添加到 Auth 组件(可能在您的 AppController 中)的配置中:

'authorize' => ['Controller']

然后,在应用程序控制器中创建一个名为 isAuthorized 的函数:

public function isAuthorized($user) {
    return true;
}

然后,在您的 UsersController 中,您可以覆盖 isAuthorized 函数:

public function isAuthorized($user) {
   // The owner of an article can edit and delete it
   if (in_array($this->request->action, ['edit'])) {
      $userId = (int)$this->request->params['pass'][0];
      if ($user['id'] !== $userId) {
         return false;
      }
    }
   return parent::isAuthorized($user);
}