cakephp 2.4.2 acl教程问题

时间:2013-11-22 19:36:02

标签: php cakephp cakephp-2.4

我制作了cakephp acl controlled application tutorial

我的问题出在这一步:

  

我们的控制器和模型现已准备好添加一些初始数据,我们的Group和User模型已绑定到Acl表。因此,请浏览到http://example.com/groups/addhttp://example.com/users/add,使用已烘焙的表单添加一些群组和用户。我做了以下几组:

当我尝试打开* / groups / add或* / users / add时,我会收到错误消息“您无权访问该位置。”

我如何解决问题?

这里是我的GroupModel和UserModel。

组:

<?php
App::uses('AppModel', 'Model');
/**
 * Group Model
 *
 */
class Group extends AppModel {

/**
 * Display field
 *
 * @var string
 */
    public $displayField = 'name';

    public $actsAs = array('Acl' => array('type' => 'requester'));

    public function parentNode() {
        return null;
    }

    public function beforeFilter() {
        parent::beforeFilter();

        $this->Auth->allow();
    }

}

用户:

<?php
App::uses('AppModel', 'Model');
/**
 * User Model
 *
 */
App::uses('AuthComponent', 'Controller/Component');
class User extends AppModel {
    public $belongsTo = array('Group');
    public $actsAs = array('Acl' => array('type' => 'requester'));

    public function parentNode() {
        if (!$this->id && empty($this->data)) {
            return null;
        }
        if (isset($this->data['User']['group_id'])) {
            $groupId = $this->data['User']['group_id'];
        } else {
            $groupId = $this->field('group_id');
        }
        if (!$groupId) {
            return null;
        } else {
            return array('Group' => array('id' => $groupId));
        }
    }

    public function beforeSave($options = array()) {
        $this->data['User']['password'] = AuthComponent::password($this->data['User']['password']);
        return true;
    }

    public function beforeFilter() {
        parent::beforeFilter();

        $this->Auth->allow();
    }
}

1 个答案:

答案 0 :(得分:1)

你读过你链接的整章吗?大约半页你会发现这些行,我想这就是你所需要的

  

在我们完全设置ACL之前,我们需要添加一些用户和组。使用AuthComponent时,我们将无法访问任何操作,因为我们尚未登录。现在我们将添加一些例外,以便AuthComponent允许我们创建一些组和用户。在GroupsController和UsersController中添加以下内容:

public function beforeFilter() {
    parent::beforeFilter();

    // For CakePHP 2.0
    $this->Auth->allow('*');

    // For CakePHP 2.1 and up
    $this->Auth->allow();
}