【发布时间】:2012-01-03 13:47:30
【问题描述】:
我对 Zend 框架还是很陌生。我在一个仍在为学校工作的项目中开始学习它。我有点纠结于如何处理 ACL 以及我的模块化结构(我真的很喜欢),并且在互联网上进行研究似乎没有产生我需要的信息。可能是因为我对框架还不是很有经验,但我仍然想在这里问。提前致谢!
目前,按照我研究的大多数最佳实践,我创建了一个模块化结构,如下所示:
application/
modules/
admin/
default/
我使用插件来控制我的 ACL,就像这样(为了简单/可读性,我只添加了一小部分):
$acl = new Zend_Acl();
$acl->addRole(new Zend_Acl_Role('guest'))
->addRole(new Zend_Acl_Role('member'), 'guest');
->addRole(new Zend_Acl_Role('admin'), 'member');
$acl->addResource(new Zend_Acl_Resource('index'));
->addResource(new Zend_Acl_Resource('admin:index'));
$acl->allow('guest', 'index', array('index'));
->allow('member', 'index', array('userpanel'));
->allow('admin');
无论如何,ACL 在默认模块上都可以正常工作 - 即使在管理模块上也是如此,但是当我有相同的控制器名称和操作时,就会出现问题,例如:
This action will allow users to edit their own account
Module: Default
Controller: User
Action: Edit
This action will allow an admin to edit any account
Module: Admin
Controller: User
Action: Edit
当我像这样在 ACL 中设置规则时:
$acl->allow('member', 'user', array('edit'));
用户也将被允许访问用户控制器上管理员的编辑页面。如何告诉 ACL 模块之间存在差异?在向 ACL 添加资源时,我看到许多示例使用“admin:user”而不是“user”作为控制器/资源名称。但是,当控制器和/或动作名称相同时,这似乎不起作用。
所以 - 最大的问题是:在我目前的情况下如何解决这个问题,或者你会建议我如何构建我的应用程序来避免这个问题?我宁愿不使用额外的控制器前缀,如“Admin_AdminUserController”,或者只是一起删除模块,只制作“adminEditAction”等。
【问题讨论】:
标签: php zend-framework web-applications module acl