1

是否可以根据 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 做到这一点。这样做最有效的方法是什么?

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

4

3 回答 3

2

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

http://codeutopia.net/blog/2009/02/18/zend_acl-part-3-creating-and-storing-dynamic-acls/

于 2011-02-02T23:15:15.997 回答
1

把这个话题拉回来,做完就好了,实现起来还是有点难度的。让我们来了解一下我们遇到的问题: Ben:我不知道您的项目正在发生什么,但让我们创建一个类似的场景,我们有一个供客人、客户、管理员使用的网站:我们需要在我们的数据库中创建一个表保存角色名称,并且对于每个角色,它都有其权限

Roles (idRole, nameRole)
Permissions (We will speak about it later)

比方说,可能以后,我们需要为我们的应用程序设置更多的角色,所以我们会设置一个页面让管理员为每个角色分配权限(如 Drupal 和 Joomla),解决方案之一是定位所有模块你在你的应用程序中,然后获取每个模块的控制器,以及每个控制器的操作。然后我们必须告诉 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)

这是一个通用结构,直到现在我都可以找到,我正在尝试取回所有模块/控制器/动作,当它完成时,我会将其发布回此处(插件类),然后我们将尝试移动所有一起(Contribution for others)用 Zend_Acl Dynamic 处理这个问题。

下一步:要创建一个插件,Library/App/Action/Helper如果它是由某人完成的,请回帖以对其进行一般性贡献,然后我们将专注于在 Zend 项目中使用 Doctrine ORM 保存数据,第三步是创建一个控制器从数据库信息(角色、权限、操作)动态创建 Zend_Acl。

任何建议/想法/建议,在这里应该继续直到完成。

亲切的问候,

于 2011-02-02T12:53:10.387 回答
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 非常灵活,我同意该手册本可以包含更多示例和最佳实践,但最终您自己并不难理解。

于 2010-08-14T13:40:48.507 回答