我可以发誓我已经正确地完成了教程,但是我收到了一条错误消息,而我的aros_acos表是空的。
我已经完成了什么:
在此页面上:http://book.cakephp.org/view/646/Creating-ACOs 我运行了“cake acl create aco root controllers”,它返回了“New Aco'控制器'。”。我还添加了“$ this-> Auth-> actionPath ='controllers /';”到AppsController的beforeFilter()。我不明白另一段代码,因为它应该去哪里解释一下 - “使用AclComponent”究竟是什么意思?
我从此页面运行了build_acl():http://book.cakephp.org/view/647/An-Automated-tool-for-creating-ACOs 它在我的'acos'表中填充了46个条目。
这是我认为问题所在的页面:http://book.cakephp.org/view/648/Setting-up-permissions我将页面上找到的代码复制到我的apps_controller.php中并稍微修改一下,指出我所在的群组的ID使用:
function initDB(){ $ 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 /蛋糕/库/控制器/组件/ acl.php, 第325行
背景:
$ aro = stdClass stdClass :: $ id = 5 $ aco =“controllers”$ actions =“*” $ value = 1 $ perms = false $ permKeys = array(“_ create”, “_read”,“_ update”,“_ delete”) $ save = array()
代码:
if ($perms == false) { trigger_error(__('DbAcl::allow() -
无效节点',true),E_USER_WARNING);
并且还显示:
DbAcl :: allow() - CORE /饼/库/控制器/组件/ acl.php, 第325行AclComponent :: allow() - CORE /饼/库/控制器/组件/ 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行 [主要] - APP / webroot / index.php,一行 88
在检查aros_acos表时,我发现没有添加任何内容!
因此,身份验证不适用于任何页面...... :( 有人有什么想法吗?我不知道如何调试这个并且我在#cakephp上问过,但他们在回复时非常沉默,基本上只是告诉我重新阅读文档。
修改 好的,所以我阅读了一些更难的教程,结果发现我一直在从错误的文件中运行该函数。我将它移动到用户控制器,它在aros_acos表中添加了3行。
但是,我仍然收到错误信息,所以我觉得还有问题!
错误消息的上下文似乎确实发生了变化,这很有趣。它现在写着:
$ aro =群组
组:: $ name =“组”
Group :: $ validate = array
Group :: $ hasMany = array
Group :: $ actsAs = array
Group :: $ useDbConfig =“default”
组:: $ useTable =“groups”
Group :: $ displayField =“name”
组:: $ id = 6
Group :: $ data = array
组:: $ table =“groups”
Group :: $ primaryKey =“id”
组:: $ _ schema = array
Group :: $ validationErrors = array
组:: $ tablePrefix =“”
Group :: $ alias =“Group”
Group :: $ tableToModel = array
Group :: $ logTransactions = false
Group :: $ transactional = false
Group :: $ cacheQueries = false
Group :: $ belongsTo = array
Group :: $ hasOne = array
Group :: $ hasAndBelongsToMany = array
Group :: $ Behaviors = BehaviorCollection对象
Group :: $ whitelist = array
组:: $ cacheSources = true
Group :: $ findQueryType = NULL
组:: $ recursive = 1
组:: $ order = NULL
组:: $ __ exists = NULL
Group :: $ __ associationKeys = array
组:: $ __ associations = array
组:: $ __ backAssociation = array
组:: $ __ insertID = NULL
组:: $ __ numRows = NULL
Group :: $ __ affectedRows = NULL
Group :: $ _ findMethods = array
组:: $ _ log = NULL
组:: $用户=用户对象
组:: $ Aro = Aro对象
$ aco =“controllers / Posts”
$ actions =“*”
$ value = 1
$ perms = false
$ permKeys = array(
“_创建”,
“_读”,
“_更新”,
“_删除”
)
$ save = array()
答案 0 :(得分:6)
我修好了。供将来参考:
固定!