是否可以根据Zend Framework应用程序中的动态元素为用户分配个人权限?
我有这样的表:
clients (id, name, contact_name, contact_number, logo, active)
modules (id, client_id, module_id, active)
permissions (id, user_id, client_id, module_id)
users (id, username, password, email, realname)
我需要做的是允许特定用户访问每个客户端的特定模块,但我无法找到任何方法让Zend_ACL执行此操作。最有效的方法是什么?
编辑:道歉,我忘了添加细节。我必须允许管理员在管理界面中授予和撤消用户的权限。
答案 0 :(得分:2)
看看这篇文章,因为我认为它可能有你想要的一些东西。仅供参考,这是该系列的第3部分,但与您的要求更为相关。
http://codeutopia.net/blog/2009/02/18/zend_acl-part-3-creating-and-storing-dynamic-acls/
答案 1 :(得分:1)
让我们回过头来讨论这个话题,最好完成它,这在实现中有点困难。 让我们对我们所拥有的问题有所了解: Ben:我不知道你的项目是怎么回事,但让我们创建一个类似的场景, 我们为访客,客户,管理员提供了一个网站: 我们需要在数据库中使用一个表来保存角色名称,并为每个角色保存其权限
Roles (idRole, nameRole) Permissions (We will speak about it later)
我们可以说,稍后我们需要为我们的应用程序设置更多角色,因此我们将为管理员设置一个页面,为每个角色分配权限(如Drupal和Joomla),其中一个解决方案是找到应用程序中的所有模块,然后获取每个模块的控制器以及每个Controller的操作。 然后我们必须告诉Zend_Acl从数据库中的Roles Table设置我们的角色,而Resources是每个控制器的Zend Modules-> Actions。 因此我们需要一个表来存储所有模块,对于每个模块,我们将需要控制器和操作
Modules (idModule, nameModule) Controllers (idController, nameController, idModule_FK) Actions (idAction, nameAction, descriptionAction, idController_FK)
说明字段将从操作描述示例
中获取/** * @description := Action to edit Roles **/ public function editAction {}
现在让我们完成我们的数据库结构
Roles (idRole, nameRole) Permission (idRole, allowedPermission, idAction, dateTimeAssigned) Modules (idModule, nameModule) Controllers (idController, nameController, idModule_FK) Actions (idAction, nameAction, descriptionAction, idController_FK)
这是一个通用结构,我可以找到,直到现在,我试图找回所有模块/控制器/动作,当它完成时,我会在这里发回(插件类)然后我们会尝试使用Zend_Acl Dynamic来处理这个问题(对他人的贡献)。
后续步骤:要在Library/App/Action/Helper
中创建一个插件,如果某人已完成,请回帖以获得有关它的一般性贡献,
然后我们将专注于使用Doctrine ORM和Zend Project保存数据,
第三步是创建一个Controller,它根据数据库信息(角色,权限,操作)动态创建Zend_Acl。
任何建议/想法/建议,这里应该继续,直到完成。
亲切的问候,
答案 2 :(得分:0)
ACL背后的基本框架可以是这样的
$acl = new Zend_Acl();
// allow user with ID 1 access reports section for client with ID 4
$acl->allow(
new Zend_Acl_Role('user_1'),
new Zend_Acl_Resource('reports'),
'client_4'
);
// allow administrator access reports module for all clients
$acl->allow(
new Zend_Acl_Role('administrator'),
'reports'
);
等等...... 这在很大程度上取决于你喜欢哪种风格。 Zend_Acl非常灵活,我同意该手册可以编写更多示例和最佳实践,但最终并不难以自行解决。