目前,我正在使用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();
}
如何确保我不需要通过网址提供ID?标准实现要求url给出如下:http://domain.com/api/users/edit/1.json通过PUT请求。我想要做的是,用户只需填写http://domain.com/api/users/edit.json并发送一个JSON正文。
我已经尝试过以下几个方面:
有谁知道我在这里做错了什么?这是一个错误吗?
答案 0 :(得分:2)
我个人会在Auth组件中使用控制器授权来阻止任何人更新别人的信息。这样您就不必更改crud代码。像这样......
将此行添加到Auth组件的配置(可能在您的AppController中):
$(MAKECMDGOALS): $(MAKECMDGOALS).src1 $(MAKECMDGOALS).src2
$(MYCOMMANDS) $(MAKECMDGOALS).scr1 $(MAKECMDGOALS).scr2
然后,在app控制器内部创建一个名为isAuthorized的函数:
'authorize' => ['Controller']
然后,在您的UsersController中,您可以覆盖isAuthorized函数:
public function isAuthorized($user) {
return true;
}