我有一个针对CRUDing数据的应用程序,用于一个相对简单的模型。我想将用户分为“工作组”。每个“工作组”都有两种类型的用户:“贡献者”和“主管”。
“贡献者”可以CRUD自己的数据,但只能读取“工作组”其他成员添加的数据。 “主管”可以CRUD“工作组”成员提供的所有数据。 “工作组”从不互相影响。
我曾考虑过使用内置的“组和权限”功能,但感觉很不客气,因为组似乎主要用于分配权限集,而权限似乎适合于每个模型的用例。
当然,我只能在“贡献者”和“主管”之间建立一个布尔字段,并在用户模型中添加带有FK的自定义“工作组”模型。
解决这个问题的优雅方法是什么?
注意:引号中的术语是特定于应用程序的,只是在它们与任何Django功能冲突的情况下进行澄清。
答案 0 :(得分: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)-最灵活的解决方案恕我直言。