zend 框架 - Zend_ACL:如何为多个小团队设计基于角色的 ACL



基于角色的ACL应该如何设计:

多个团队,

每个团队由一名经理和多名成员组成,并在一个位置工作。每个位置可以有多个团队,并且有多个位置。

每个团队的经理只能查看/编辑其团队成员的数据。一个人也可以是多个团队的成员,与位置无关。

Location_1
-Team_1            -Team_2
 -Manager           -Manager
  -Member_1          -Member_1
  -Member_2          -Member_2
Location_2
-Team_1            -Team_2
 -Manager           -Manager
  -Member_1          -Member_1
  -Member_2          -Member_2

的想法:我正在考虑将其分成两部分。第 1 部分:每个团队应该有一个小组。维护数据库中的组成员身份表。部分2:现在,每个用户都可以具有任何角色。ACL可以根据这些角色进行设计。但是数据将根据第 1 部分获取。这样,可以在不更改代码的情况下添加新团队。这是一条正确的路吗?

这里有一个相当健谈的答案,只有松散的讨论,没有代码,至少目前是这样。

您自己的模型/数据结构必须考虑成员、位置和团队。我想你已经非常清楚地描述了这些关系,所以这应该是直截了当的。关系思维:团队成员(包括经理)的表格;位置表;一个团队表,其中外键表示位置,外键表示标识经理的成员;将成员链接到团队的交叉引用表。我假设您的成员模型将具有isManagerOfTeam($team)isMemberOfTeam($team)之类的方法。很简单。

但其中大部分只是对关系进行建模,可以说独立于访问控制。

对于访问控制,位置似乎无关紧要;关键是团队成员和团队管理

听起来您尝试访问控制的数据(最终将成为"资源")将被标记为成员ID,以标识"拥有"成员。因此,该数据的模型可能具有getMember()甚至只是getMemberId()的方法。

因此,我看到一些 Acl 规则使用Zend_Acl_Assert_Interface实例对角色 ($member) 与这些资源之间的关系进行动态检查:

  1. My_Acl_Assertion_BelongsToSelf
  2. My_Acl_Assertion_BelongToMemberUnderManagement

然后,assert()方法可以对传递的角色和资源调用相关的模型方法,以检查团队和管理关系。

就像我说的,有点松散的答案,但希望它对一些想法有所帮助。

相关内容

  • 没有找到相关文章

最新更新