ACL,ARO和ACO,如果有新的部分,如何更新它们?

时间:2011-04-01 16:50:34

标签: cakephp acl

如果我在网站中添加了一个部分,我正在尝试了解如何使用AROsACOs

CakePHP指南明确了ACL的概念是如何工作的,而不是如何在代码中实现它。就个人而言,我发现教程的所有部分都不清楚如何在CakePHP框架内使用它们。它似乎是CakePHP框架中最不友好的部分。

现在当我进入我创建的新部分时,我收到此错误,我不明白我是如何解决的。

Warning (512): DbAcl::check() - Failed ARO/ACO node lookup in permissions check.  Node references:
Aro: Array
(
    [User] => Array (
        [id] => 1
        [username] => vittorio
        [group_id] => 1
        [created] => 2011-03-30 10:51:23
        [modified] => 2011-03-30 10:51:23
        [viewable] => 0
    )

)

Aco: controllers/Works/index [CORE/cake/libs/controller/components/acl.php, line 273]

如果我看上去 http://book.cakephp.org/view/647/An-Automated-tool-for-creating-ACOs
并且在 http://book.cakephp.org/view/996/Creating-Components#!/view/1548/Creating-ACOs-Access-Control-Objects

我应该得到答案,但如果我再次运行此代码调用网址mysite.com/build_acl,我只会收到这些错误:

Missing Controller

Error: BuildAclController could not be found.

Error: Create the class BuildAclController below in file: app/controllers/build_acl_controller.php

<?php
    class BuildAclController extends AppController {

    var $name = 'BuildAcl';
}
?>

Notice: If you want to customize this error message, create app/views/errors/missing_controller.ctp

是否存在一位体面的指南,他会谈论ACLAROsACOs以及如何在CakePHP上实施这些指导而不会让读者丢失?

2 个答案:

答案 0 :(得分:3)

维托里奥,

在充分尊重的情况下,ACL和AUTH相结合是一种非常通用的工具。第一次让它工作让我很烦恼。我一遍又一遍地看到的主要错误是:

  • 在创建一个或多个新操作后调用build_acl
  • 初始化新出现的设置(新的ACL节点作为输出 具有适当的访问权限 权利。
  • 在从父parent::beforeFilter()继承的每个控制器中调用app_controller(此方法中通常包含关键设置)。
  • 尝试保存foobared设置,而不是再次阅读本书末尾的Auth + Acl教程。它起作用(没有冒犯),许多人以前完成它,所以你也可以(我不是说它是即时完成的)。
  • 重新发明轮子:在基本功能Auth + Acl tutorial之后,查看 sourceforge github 上的插件。

  • 重新发明轮子^^,afaik尚未编写完美的AUTH + ACL管理插件(但确实存在可用的代码)

好的旅程,本杰明。

<强> Edit0 基本代码卫生有助于,例如如果您允许用户作为受控对象请求对象和操作,则将build_acl()写入users_controller是有意义的,然后直接将其写入例如init_db(),您可以在其中集中设置访问权限。 不要忘记在投入生产之前删除这些黑客,即使再次设置正确的访问权限也不会造成太大损害,但想象一下,如果john doe和朋友一直运行此功能,他们会对您的应用做些什么Ü

答案 1 :(得分:0)

mysite.com/build_acl

您必须在控制器的任何操作中运行build_acl,您不能将其称为您指的是没有控制器的操作。至少你可以试试这个

mysite.com/{my_controller}/build_acl

或在app_controller的beforeFilter方法中运行它,例如

function beforeFilter(){
  $this->build_acl();
}

当然,函数本身必须在app_controller中声明。