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

时间:2010-01-24 20:14:41

标签: php authentication cakephp acl

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

我已经完成了什么:

  1. 在此页面上:http://book.cakephp.org/view/646/Creating-ACOs 我运行了“cake acl create aco root controllers”,它返回了“New Aco'控制器'。”。我还添加了“$ 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 =& $这 - >用户 - 基团;

    //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');
    

    }

  4. 我还从我的用户和组控制器中获取了对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()

1 个答案:

答案 0 :(得分:6)

我修好了。供将来参考:

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