2012-01-30 87 views
1

我正在学习cakephp的ACL功能。我已经去了cakephp文档。为了学习更多,我已经检查了一些ACL插件的代码/ db,比如croogo和alaxos ACL插件。我可以看到,在aros_acos表中,有像_create,_read,_update和_delete这样的列。从这些示例(croogo/alaxos)中,对于一个动作,例如: - add(在用户控制器下),我可以在_create,_read,_update和_delete列中看到值为1 1 1 1。由于名称表示add只能映射到_create(1 0 0 0),对吗?另外,在这种情况下我们需要4列吗?Cakephp ACL操作模式与CRUD模式

我与CRUD模式的动作模式混淆。在我的应用程序中,除了CRUD之外,还有一些功能如批准,拒绝等。我是否需要为这些操作添加列?或者mapactions将适用于此(在这种情况下,我是否需要映射控制器中的所有操作)?另外,在我的应用程序中,我需要给所有者编辑和所有者删除权限。如何以更好的方式用CakePHp ACL完成所有这些操作?

回答

5

这取决于你想要用Acl做什么。你在Croogo或Alaxos Acl插件(顺便说一下,我的插件)中看到的是使用Acl来允许/拒绝访问某些操作。 这是通过一起使用AuthComponent和AclComponent实现的。如果这样做,如果你看一下蛋糕的代码,权限检查在DbAcl类完成在下面的方法:

function check($aro, $aco, $action = "*") 

这需要潜在的三个参数。

这个函数的调用由ActionsAuthorize类的authorize()功能在下面这行:

return $Acl->check($user, $this->action($request)); 

这显然是没有第三个参数的调用。

所以基本上这是什么第三个说法?这是照顾aros_acos数据表的_xxx字段的方式。因此,这意味着Auth + Acl组件不会使用这些_xxx字段来检查权限。 实际上,它们被使用但不同:当不使用第三个参数时,所有设置为1的字段表示允许,如果一个或多个字段设置为-1,则表示拒绝。 个人为Alaxos Acl插件,我选择将所有这些字段设置为-1拒绝,只是为了更清楚。

关于你的应用程序,如果它的“功能”被映射到行动,你很可能只是忘记了这些_xxx领域和使用核心验证+ ACL机制。

关于您的最后一个问题(所有者编辑和删除),这是Cake ACL的常见问题。 答案是大多数情况下比较Object.user_id和记录的用户标识来决定用户是否可以编辑/删除记录。 Cake ACL不支持开箱即用的记录所有者。