Django 扩展组的权限不适用于用户

Django Extended Group's Permissions not applied to users

所以我扩展了 Django 的 Group 模型来添加一个额外的字段,如下所示:

class MyModel(Group):

    extra_field = models.TextField(null=True, blank=True)

这样做时,MyModel 的每个实例都会创建,同时也会创建一个 Group 实例。 如果我使用 user.groups.add(group) 将用户添加到生成的组中,该组将按预期添加。

但是,来自 MyModel 组的权限似乎并没有下传给用户,即

user.get_all_permissions()get_group_permissions() 甚至测试 user.has_permission(mygroup_permission) returns 什么都不做。仅显示来自 pure 组实例(在扩展模型之前创建)的权限。

我需要做些什么才能让用户看到自定义组的权限吗?

TIA

当你查看默认的 django 身份验证后端 ModelBackend 时,你可以看到:

def _get_group_permissions(self, user_obj):
        user_groups_field = get_user_model()._meta.get_field('groups')
        user_groups_query = 'group__%s' % user_groups_field.related_query_name()
        return Permission.objects.filter(**{user_groups_query: user_obj})

很明显,它试图从表示用户组的字段中确定权限,此处为 groups。因为你的 MyModel 没有绑定到 djangos 用户模型,所以你不会通过这种方式获得任何权限。

您现在可以:

  1. 编写自定义用户模型并替换groups
  2. 的关系
  3. 编写自定义身份验证后端
  4. 使用 One-To-One-Relation 从 MyModel 到组

在我看来,最简单的方法是在 One-To-One 关系中使用新模型扩展组模型。这样您就可以进一步使用 djangos 身份验证系统并获得额外的数据。