如何解决Django扩展组的权限不适用于用户
因此,我扩展了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)
都不会返回任何结果。仅显示 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用户模型无关,因此您将不会以这种方式获得任何权限。
您现在可以:
- 编写自定义用户模型并替换组 的关系
- 编写自定义身份验证后端
- 使用从MyModel到组的一对一关系
我认为,最简单的方法是在一对一关系中用新模型扩展Group模型。这样,您就可以进一步使用djangos身份验证系统并获得其他可用数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。