Cakephp ACL动作模式与CRUD模式

bin*_*noy 1 acl cakephp 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完成所有这些操作?

nIc*_*IcO 5

这取决于你想用Acl做什么.您在Croogo或Alaxos Acl插件(顺便说一下我的插件)中看到的是使用Acl来允许/拒绝访问某些操作.这是通过将AuthComponent和AclComponent一起使用来实现的.执行此操作时,如果查看Cake代码,则可以DbAcl使用以下方法在类中完成权限检查:

function check($aro, $aco, $action = "*")
Run Code Online (Sandbox Code Playgroud)

这可能需要三个参数.

对此函数的调用由以下行中函数中的ActionsAuthorize类完成authorize():

return $Acl->check($user, $this->action($request));
Run Code Online (Sandbox Code Playgroud)

这显然是没有第三个参数的电话.

所以基本上这第三个论点是什么?这是处理aros_acos数据表的_xxx字段的方法.总而言之,这意味着Auth + Acl组件不使用这些_xxx字段来检查权限.实际上它们是被使用的,但不同的是:当没有使用第三个参数时,所有字段都设置为1允许,如果一个或多个字段设置为-1,则表示被拒绝.就个人而言,对于Alaxos Acl插件,我选择将所有这些字段设置-1为拒绝,只是为了更清晰.

关于您的应用程序,如果其"功能"映射到操作,您可能只是忘记这些_xxx字段并使用核心Auth + Acl机制.

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