允许管理员和作者编辑CakePHP中的数据

时间:2014-03-21 21:32:58

标签: php cakephp cakephp-2.0 cakephp-2.4

如何(安全地)仅允许管理员和作者编辑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'));
    }
}

2 个答案:

答案 0 :(得分:2)

您可以存储作者的ID或名称以启用它自己的版本。 您可以检查行的管理员或作者或访客'以检查是否编辑了所有内容。

http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html#authorization-who-s-allowed-to-access-what

这已经在文档

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)

Follow CakePHP book

我希望文章中的Controller::isAuthorized()Post::isOwnedBy()是您的目的。