如何(安全地)仅允许管理员和作者编辑CakePHP中的数据,而不引用硬编码的组ID?
我在CakePHP 2.4应用程序中使用Auth和ACL,所以通常我只会将编辑操作限制为管理员和版主,但我还需要允许作者编辑他们创建的数据。
我目前在我的edit
方法中使用了这个,但它使用了硬编码值,这是不好的做法:默认情况下我将ACLS设置为允许edit
,如果控制器重定向,则控制器重定向用户既不是作者也不是管理员。
有没有办法尊重ACL设置(从而避免使用硬编码的组ID),同时为帖子作者打一个洞?
if ($this->Auth->user('id') != $this->Post->field('user_id')) {
if ($this->Auth->user('group_id') > 2) {
$this->Session->setFlash(__('You are not authorized to edit this post.'), 'flash/error');
$this->redirect(array('action' => 'index'));
}
}
答案 0 :(得分:2)
您可以存储作者的ID或名称以启用它自己的版本。 您可以检查行的管理员或作者或访客'以检查是否编辑了所有内容。
这已经在文档
中public function isAuthorized($user) {
// All registered users can add posts
if ($this->action === 'add') {
return true;
}
// The owner of a post can edit and delete it
if (in_array($this->action, array('edit', 'delete'))) {
$postId = $this->request->params['pass'][0];
if ($this->Post->isOwnedBy($postId, $user['id'])) {
return true;
}
}
return parent::isAuthorized($user);
}
答案 1 :(得分:-1)
我希望文章中的Controller::isAuthorized()
和Post::isOwnedBy()
是您的目的。