CakePHP使用ACL与MongoDB,AclNode :: node() - 找不到标识的Aro节点

时间:2014-06-24 08:26:42

标签: mongodb cakephp console acl

我正在使用ACL设置CakePHP应用程序。我使用的是MongoDB而不是MySQL。一切正常,直到我设置ACL表。 ACL数据库已初始化。我想设置一些基本的ACO和ARO但失败了。我只能创建父级设置为root的节点。每次我添加一个父节点时,它会给出错误,并显示以下错误消息。

AclNode::node() - Couldn't find Aro node identified by "Array ( [Aro0.model] => User [Aro0.foreign_key] => 53a8f92db238e52c08d63af1 ) "

这是CakePHP MongoDB数据源的问题吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

那不会起作用

CakePHP的ACL逻辑建立在the tree behavior上,用于在关系数据库中存储分层数据的行为。 MongoDB是一个无模式数据库,它没有必要使用树行为来存储分层数据的限制;将它们放在一起is a very odd match(引用自己):

  

如果你想在mongodb中存储树形结构 - MPTT可能是最不适用的模型。

要使用CakePHP与MongoDB的ACL实现,需要确保正确填充ACO和ARO表中的lft字段。

是否需要DB ACL

值得说明并认真考虑使用DB ACL。

浩大大多数(尝试过的)使用过程中,根本没有必要考虑这些问题的候选名单:

  • 是否所有规则都可以在一些条款中描述,例如"只有所有者可以编辑他们的记录?"
  • 规则是否仅由开发人员设置应用程序创建?
  • 表现是一个因素/关注点吗?

如果对任何一个问题的回答是"是" - 数据库ACL可能不是最佳解决方案。

考虑使用ini ACL或仅使用特定于控制器的逻辑实现isAuthorized