【发布时间】:2011-01-08 20:57:38
【问题描述】:
我可以发誓我已经正确完成了教程,但是我收到一条错误消息并且我的 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:
函数初始化数据库(){ $group =& $this->用户->组;
//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() - 无效节点 [核心/蛋糕/库/控制器/组件/acl.php, 第325行]
上下文:
$aro = stdClass stdClass::$id = 5 $aco = "控制器" $actions = "*" $value = 1 $perms = 假 $permKeys = array("_create", “_read”、“_update”、“_delete”) $save = 数组()
代码:
if ($perms == false) { trigger_error(__('DbAcl::allow() -无效节点', true), E_USER_WARNING);
还显示:
DbAcl::allow() - 核心/蛋糕/库/控制器/组件/acl.php, 第 325 行 AclComponent::allow() - 核心/蛋糕/库/控制器/组件/acl.php, 第 101 行 AppController::initDB() - APP/app_controller.php,第 23 行 对象::dispatchMethod() - CORE/cake/libs/object.php,第 116 行 调度程序::_invoke() - CORE/cake/dispatcher.php,第 227 行 调度员::dispatch() - CORE/cake/dispatcher.php,第 194 行 [主要] - 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 = "组"
Group::$tableToModel = 数组
组::$logTransactions = false
Group::$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
Group::$User = 用户对象
Group::$Aro = Aro 对象
$aco = "控制器/帖子"
$actions = "*"
$值 = 1
$perms = 假
$permKeys = 数组(
“_create”,
“_read”,
“_update”,
“_删除”
)
$save = 数组()
【问题讨论】:
标签: php authentication cakephp acl