做CakePHP Acl教程.我似乎无法填充aros_acos

oli*_*ive 2 php authentication acl cakephp

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

我已经做了什么:

  1. 在这个页面上:http://book.cakephp.org/view/646/Creating-ACOs 我运行"cake acl create aco root controllers"并返回"New Aco'controller'创建." 我还添加了"$ this-> Auth-> actionPath ='controllers /';" 到AppsController的beforeFilter().我不明白另一段代码,因为它应该去哪里得到了很好的解释 - "使用AclComponent"究竟是什么意思?

  2. 我从这个网页运行build_acl():http://book.cakephp.org/view/647/An-Automated-tool-for-creating-ACOs 它填充我的"ACOS"表46项.

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

    function 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');
    
    Run Code Online (Sandbox Code Playgroud)

    }

我还从我的用户和组控制器中获取了对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 = "控制器" $动作= "*" $值= 1个$烫发=假$ permKeys =阵列( "_create", "_read", "_Update","_delete ")$ save = array()

码:

    if ($perms == false) {
        trigger_error(__('DbAcl::allow() -
Run Code Online (Sandbox Code Playgroud)

无效节点',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表时,我发现没有添加任何内容!

因此,身份验证不适用于任何页面... :(有没有人有任何想法?我不知道如何调试这个,我问#cakeph,但他们是非常沉默的回应,基本上只是告诉我重新 - 阅读文档.

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

但是,我仍然收到错误消息,所以我觉得还有问题!

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

$ aro =集团

Group :: $ name ="Group"

Group :: $ validate = array

Group :: $ hasMany = array

Group :: $ actsAs = array

Group :: $ useDbConfig ="default"

Group :: $ useTable ="groups"

Group :: $ displayField ="name"

Group :: $ id = 6

Group :: $ data = array

Group :: $ table ="groups"

Group :: $ primaryKey ="id"

Group :: $ _ schema = array

Group :: $ validationErrors = array

Group :: $ 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

Group :: $ cacheSources = true

Group :: $ findQueryType = NULL

Group :: $ recursive = 1

Group :: $ order = NULL

Group :: $ __ exists = NULL

Group :: $ __ associationKeys = array

Group :: $ __ associations = array

Group :: $ __ backAssociation = array

Group :: $ __ insertID = NULL

Group :: $ __ numRows = NULL

Group :: $ __ affectedRows = NULL

Group :: $ _ findMethods = array

Group :: $ _ log = NULL

Group :: $ User =用户对象

Group :: $ Aro = Aro对象

$ aco ="控制器/帖子"

$ actions ="*"

$ value = 1

$ perms = false

$ permKeys = array(

"_创建",

"_读",

"_Update"

"_删除"

)

$ save = array()

oli*_*ive 6

我修好了它.备查:

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

固定!