2

我可以发誓我已经正确地完成了教程,但是我收到一条错误消息并且我的 aros_acos 表是空的。

我已经做了什么:

  1. 在此页面上: http: //book.cakephp.org/view/646/Creating-ACOs 我已经运行“cake acl create aco root controllers”,它返回“New Aco 'controllers' created。”。我还添加了“$this->Auth->actionPath = 'controllers/';” 到 AppsController 的 beforeFilter() 。我不理解另一段代码,因为它被错误地解释了应该去哪里——“使用 AclComponent”到底是什么意思?

  2. 我已经从这个页面运行了 build_acl():http://book.cakephp.org/view/647/An-Automated-tool-for-creating-ACOs 已经用 46 个条目填充了我的“acos”表。

  3. 这是我认为问题所在的页面:http: //book.cakephp.org/view/648/Setting-up-permissions我将页面上找到的代码复制到了我的 apps_controller.php 并稍微修改了它以指向我正在使用的组的 ID:

    函数 initDB() { $group =& $this->User->Group;

    //Allow admins to everything
    $group->id = 5;
    $this->Acl->allow($group, 'controllers');
    
    //allow managers to posts and widgets
    $group->id = 6;
    $this->Acl->deny($group, 'controllers');
    $this->Acl->allow($group, 'controllers/Posts');
    $this->Acl->allow($group, 'controllers/Widgets');
    
    //allow users to only add and edit on posts and widgets
    $group->id = 7;
    $this->Acl->deny($group, 'controllers');
    $this->Acl->allow($group, 'controllers/Posts/add');
    $this->Acl->allow($group, 'controllers/Posts/edit');
    $this->Acl->allow($group, 'controllers/Widgets/add');
    $this->Acl->allow($group, 'controllers/Widgets/edit');
    

    }

我还从我的用户和组控制器中获取了对 allowedActions 的所有引用,并将正确的代码添加到我的帖子、小部件和 AppController 页面中......

通过访问http://localhost/basic_cake2/groups/initDB在 AppController 中运行 initDB()时,我在屏幕顶部收到一条警告消息。它说:

DbAcl::allow() - 无效节点 [CORE/cake/libs/controller/components/acl.php,第 325 行]

语境:

$aro = stdClass stdClass::$id = 5 $aco = "controllers" $actions = "*" $value = 1 $perms = false $permKeys = array( "_create", "_read", "_update", "_delete " ) $保存 = 数组()

代码:

    if ($perms == false) {
        trigger_error(__('DbAcl::allow() -

无效节点', true), E_USER_WARNING);

并且还显示:

DbAcl::allow() - CORE/cake/libs/controller/components/acl.php,第 325 行 AclComponent::allow() - CORE/cake/libs/controller/components/acl.php,第 101 行 AppController::initDB () - APP/app_controller.php,第 23 行 Object::dispatchMethod() - CORE/cake/libs/object.php,第 116 行 Dispatcher::_invoke() - CORE/cake/dispatcher.php,第 227 行 Dispatcher:: dispatch() - CORE/cake/dispatcher.php,第 194 行 [main] - APP/webroot/index.php,第 88 行

在检查 aros_acos 表时,我发现没有添加任何内容!

因此,身份验证在任何页面上都不起作用...... :( 有没有人有任何想法?我不知道如何调试这个,我在#cakephp 上问过,但他们对此很沉默,基本上只是告诉我重新-阅读文档。

编辑: 好的,所以我更加努力地阅读了教程,结果发现我一直在从错误的文件中运行该函数。我将它移到了用户控制器,并在 aros_acos 表中添加了 3 行。

但是,我仍然收到该错误消息,所以我认为仍然有问题!

错误消息的上下文似乎确实发生了变化,这很有趣。现在是这样写的:

$aro = 组

组::$name = "组"

组::$validate = 数组

组::$hasMany = 数组

组::$actsAs = 数组

组::$useDbConfig = "默认"

组::$useTable = "组"

组::$displayField = "名称"

组::$id = 6

组::$data = 数组

组::$table = "组"

组::$primaryKey = "id"

组::$_schema = 数组

组::$validationErrors = 数组

组::$tablePrefix = ""

组::$alias = "组"

组::$tableToModel = 数组

组::$logTransactions = false

组::$transactional = false

组::$cacheQueries = false

组::$belongsTo = 数组

组::$hasOne = 数组

组::$hasAndBelongsToMany = 数组

Group::$Behaviors = BehaviorCollection 对象

组::$whitelist = 数组

组::$cacheSources = true

组::$findQueryType = NULL

组::$recursive = 1

组::$order = NULL

组::$__exists = NULL

组::$__associationKeys = 数组

组::$__associations = 数组

组::$__backAssociation = 数组

组::$__insertID = NULL

组::$__numRows = NULL

组::$__affectedRows = NULL

组::$_findMethods = 数组

组::$_log = NULL

组::$User = 用户对象

Group::$Aro = Aro 对象

$aco = "控制器/帖子"

$actions = "*"

$价值 = 1

$perms = 假

$permKeys = 数组(

“_创造”,

“_读”,

“_更新”,

“_删除”

)

$保存 = 数组()

4

1 回答 1

6

我修好了它。备查:

  1. 我删除了所有表格的内容以便从头开始。
  2. 我一直在从错误的文件中运行 initDB()。我正确地将其移至用户控制器。运行它不再给出错误消息并将正确的条目添加到 aros_acos。

固定的!

于 2010-01-24T21:03:41.690 回答