分组用户并在组内具有权限

时间:2018-10-31 16:16:52

标签: django

我有一个针对CRUDing数据的应用程序,用于一个相对简单的模型。我想将用户分为“工作组”。每个“工作组”都有两种类型的用户:“贡献者”和“主管”。

“贡献者”可以CRUD自己的数据,但只能读取“工作组”其他成员添加的数据。 “主管”可以CRUD“工作组”成员提供的所有数据。 “工作组”从不互相影响。

我曾考虑过使用内置的“组和权限”功能,但感觉很不客气,因为组似乎主要用于分配权限集,而权限似乎适合于每个模型的用例。

当然,我只能在“贡献者”和“主管”之间建立一个布尔字段,并在用户模型中添加带有FK的自定义“工作组”模型。

解决这个问题的优雅方法是什么?

注意:引号中的术语是特定于应用程序的,只是在它们与任何Django功能冲突的情况下进行澄清。

1 个答案:

答案 0 :(得分:1)

如果我正确理解您有2级系统:

  1. 工作组-仅用于组织目的,与权限没有直接关系,
  2. 用户角色-(贡献者和主管)与权限相关。

Django Auth Group model可以用于一个或其他目的,或者根本不使用:

A)组==工作组-在这种情况下,您不应使用组来管理权限。每个用户都需要分配分配的“贡献者”或“主管”权限,例如

some_group = Group.objects.create(name="Some workgroup")
user.groups.add(some_group)

sv_perm = Permission.objects.create(codename='can_supervise',...)
user.user_permissions.add(permission=sv_perm)

B)组可以充当用户角色,在这种情况下,工作组应为自定义模型,并且您应具有User.FK->工作组。

some_workgroup = Workgroup.objects.create("some workgroup"...)
user.workgroup = some_workgroup

sv_perm = Permission.objects.create(codename='can_supervise',...)
sv_group = Group.objects.create(name="Supervisors")
sv_group.permissions.add(sv_perm)
user.groups.add(sv_group)

C)使用Django身份验证组跳过-A)和B)的组合,例如

some_workgroup = Workgroup.objects.create(name="Some workgroup")
user.workgroup = some_workgroup

sv_perm = Permission.objects.create(codename='can_supervise',...)
user.user_permissions.add(permission=sv_perm)

注意:这不是经过测试的代码,仅用作演示。

我对自定义解决方案最满意,因此我会选择C)-最灵活的解决方案恕我直言。