1

假设我有对象 A、B、C、D、E、F,协作组 C1、C2、用户 C1U1(管理员)、C1U2(用户)、C2U1(管理员)、C2U2(用户)。

A、C、E 属于 C1 组。B、D、F 属于 C2 组。

因此,只有相应组的成员才能查看他们各自的对象。此外,创建的任何对象最终都属于其创建者(用户)所属的组。

管理员可以创建和编辑每个实体,用户只能创建实体并且只能编辑他的实体。

当然,如前所述,每个用户(管理员或普通用户)只能查看属于他的组的实体。

在我的特定任务中,有多种实体类型(静态)和多种用户类型(静态)。将有多个协作组(动态),用户将在其中创建一些实体。一些用户将只能查看实体(由于是相应协作组的成员,他们有权查看实体)、创建和编辑。其中一些将能够编辑其他用户的实体(但仅限于某些类型的实体)。本质上它有点像 JIRA。

也就是说,我的问题很简单:什么模式有助于组织这些东西?我相信这是一个普遍的问题,因此它必须有共同的名字。

我知道有一种直截了当的方法来创建它。我使用的是 symfony 2,它同时具有 RBAC 和 ACL,但没有 RBACL afaik。RBAC 将帮助我处理用户类型(我使用 UserGroups 并创建 ROLE_EDIT_ENTITYTYPE1 之类的角色),使用 ACL 执行所有权检查。

但是我如何实施这些协作组?

对不起,如果我的解释听起来含糊不清或只是愚蠢或其他任何事情,我想听听有关主题的任何信息。我有一种感觉,我在这里遗漏了一些东西。

PS:不确定“安全”标签,如果它与这个问题有关。

4

1 回答 1

1

对于您的情况,仅 Role Hierachy 是不够的。您需要的是完整的 ACL: http ://symfony.com/doc/current/cookbook/security/acl.html

您可以在保存实体时在侦听器中创建 ACL 权限,然后授予所有组成员访问权限。

您还可以使用不同的 ACL 掩码,以控制哪些用户可以编辑实体以及哪些用户只能查看它们: http ://symfony.com/doc/current/cookbook/security/acl_advanced.html

很抱歉主要链接到默认文档,但我认为这基本上涵盖了您需要的所有内容。

于 2013-09-30T08:41:19.630 回答