1

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

class MyModel(Group):

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

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

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

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

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

TIA

4

1 回答 1

1

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

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. 编写自定义用户模型并替换组的关系
  2. 编写自定义身份验证后端
  3. 使用 MyModel 中的一对一关系进行分组

在我看来,最简单的方法是使用一对一关系中的新模型来扩展 Group 模型。这样,您可以进一步使用 djangos 身份验证系统并获得其他可用数据。

于 2020-08-31T10:41:02.637 回答