我在删除视图甚至shell中的用户权限时遇到问题。让我解释一下我的问题:
我在shell中做了那些测试:
org = Organisateur.objects.get(user__username__contains="ghj")
content_type = ContentType.objects.get_for_model(Tournoi)
Tournoi是模型的名称
permission_ecriture = 'ecriture_Palaiseau'
permission = Permission.objects.get(content_type=content_type, codename=permission_ecriture)
org.user.user_permissions.remove(permission)`
但是当我写道:
org.user.has_perm('inscription.ecriture_Palaiseau')`
它返回True
但是当我重写时:
org = Organisateur.objects.get(user__username__contains="ghj")
org.user.has_perm('inscription.ecriture_Palaiseau')`
它返回False
真的很奇怪。它为什么会这样?
在我的观看中,即使我写了,似乎也没有删除权限:
org = Organisateur.objects.get(user__username__contains="ghj")
(删除权限后,用户仍然拥有它)
我想要做的是删除用户的权限,然后立即向同一用户添加其他权限。 但每次我这样做时,用户仍然可以删除" ......
非常感谢
我期待很快收到你们的回复。
答案 0 :(得分:7)
由于权限已缓存,因此会出现此行为。来自Django文档:
<强> Permission caching 强>
ModelBackend在第一次需要获取权限检查后对User对象进行高速缓存的权限。这通常适用于请求 - 响应周期,因为通常不会在添加权限后立即检查权限(例如,在管理员中)。如果要添加权限并在之后立即检查它们,例如,在测试或视图中,最简单的解决方案是从数据库中重新获取用户。
答案 1 :(得分:0)
您的代码几乎是正确的,只是忘了最后保存您的user object
!
使用user.save()