【问题标题】:Zend_ACL : How to design Role based ACL for multiple small teams?Zend_ACL:如何为多个小团队设计基于角色的 ACL?
【发布时间】:2011-05-08 21:17:17
【问题描述】:

应该如何设计基于角色的 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 部分获取数据。这样可以在不更改代码的情况下添加新团队。这是正确的方法吗?

【问题讨论】:

  • 为什么投票关闭?我正在再次检查指南。

标签: zend-framework roles zend-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()方法可以调用传递的角色和资源上的相关模型方法来检查团队和管理关系。

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

【讨论】:

    猜你喜欢
    • 2020-03-17
    • 2017-12-24
    • 2018-01-28
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    相关资源
    最近更新 更多