Php 使用Zend_ACL的基于用户的动态权限

Php 使用Zend_ACL的基于用户的动态权限,php,zend-framework,zend-acl,Php,Zend Framework,Zend Acl,在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 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实现这一点。最有效的方法是什么


编辑:抱歉,我忘了添加细节。我必须允许管理员在管理界面中授予和撤销用户的权限。

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非常灵活,我同意本手册可以编写更多的示例和最佳实践,但最终您自己也不难理解。

让我们回到这个主题,完成它很好,实现起来有点困难。 让我们来解释一下我们所面临的问题: 本:我不知道你的项目正在进行什么,但让我们创建一个类似的场景, 我们为客人、客户、管理员建立了一个网站: 我们需要在数据库中有一个表来保存角色名称,并且每个角色都有自己的权限

比如说,可能以后,我们需要为我们的应用程序设置更多的角色,因此我们将为管理员设置一个页面来为每个角色分配权限(如Drupal和Joomla),解决方案之一是定位应用程序中的所有模块,然后获取每个模块的控制器以及每个控制器的操作。 然后我们必须告诉Zend_Acl从数据库中的roles表中设置我们的角色,资源是每个控制器的Zend模块->操作。 因此,我们需要一个表来存储所有模块,对于每个模块,我们需要控制器和操作

描述字段将从动作描述示例中获取

现在让我们完成我们的数据库结构

这是一个一般的结构,我可以找到,直到现在,我正在尝试找回所有的模块/控制器/动作,当它完成时,我会把它放回这里(插件类),然后我们会尝试一起移动(为其他人的贡献),以用Zend_Acl Dynamic处理这个问题

下一步:要在
库/App/Action/Helper中创建一个插件,如果它是由某人完成的,请发回以获得关于它的一般贡献,
然后我们将集中精力在Zend项目中使用Doctrine ORM保存数据,
第三步是创建一个控制器,该控制器根据数据库信息(角色、权限、操作)动态创建Zend_Acl

任何建议/想法/建议,在此应继续,直到完成


亲切的问候,

看看这篇文章,因为我认为它可能有一些你想要的。仅供参考,这是本系列的第三部分,但与您的要求更相关


有没有从MySQL后端(或模型)加载的方法?由于ACL的逻辑因应用程序而异,Zend_ACL不直接支持从数据库加载数据。您应该分两步来完成-a)从数据库加载数据;b) 解析数据并填充Zend_Acl。这不是一个bug交易。是的,当然有可能。Zend_Acl非常灵活。您可以从数据库、xml文件或任何您想要的东西中获取用户角色和权限。你甚至可以硬编码,但这并不常见。老实说,我不知道这是一个答案还是一个问题。
Roles (idRole, nameRole)
Permissions (We will speak about it later)
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)