Cakephp ACL动作模式与CRUD模式

时间:2012-01-30 12:06:29

标签: cakephp acl cakephp-2.0

我正在学习cakephp的ACL功能。我已经走了cakephp docs。为了解更多信息,我检查了一些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列吗?

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

1 个答案:

答案 0 :(得分:5)

这取决于你想用Acl做什么。您在Croogo或Alaxos Acl插件(顺便说一下我的插件)中看到的是使用Acl来允许/拒绝访问某些操作。 这是通过将AuthComponent和AclComponent一起使用来实现的。执行此操作时,如果查看Cake代码,则可以使用以下方法在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字段并使用核心Auth + Acl机制。

关于您的上一个问题(所有者编辑和删除),这是Cake ACL的常见问题。 答案是大多数情况下,比较Object.user_id和记录的用户ID以确定用户是否可以编辑/删除记录更简单。 Cake ACL不支持开箱即用的唱片所有者。