我可以发誓我已经正确地完成了教程,但是我收到一条错误消息并且我的 aros_acos 表是空的。
我已经做了什么:
在此页面上: 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”到底是什么意思?
我已经从这个页面运行了 build_acl():http://book.cakephp.org/view/647/An-Automated-tool-for-creating-ACOs它 已经用 46 个条目填充了我的“acos”表。
这是我认为问题所在的页面: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 = 数组(
“_创造”,
“_读”,
“_更新”,
“_删除”
)
$保存 = 数组()