删除用户的权限(django)

时间:2015-08-13 09:06:29

标签: python django permissions django-permissions

我在删除视图甚至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")

(删除权限后,用户仍然拥有它)

我想要做的是删除用户的权限,然后立即向同一用户添加其他权限。 但每次我这样做时,用户仍然可以删除" ......

非常感谢

我期待很快收到你们的回复。

2 个答案:

答案 0 :(得分:7)

由于权限已缓存,因此会出现此行为。来自Django文档:

  

<强> Permission caching

     

ModelBackend在第一次需要获取权限检查后对User对象进行高速缓存的权限。这通常适用于请求 - 响应周期,因为通常不会在添加权限后立即检查权限(例如,在管理员中)。如果要添加权限并在之后立即检查它们,例如,在测试或视图中,最简单的解决方案是从数据库中重新获取用户。

答案 1 :(得分:0)

您的代码几乎是正确的,只是忘了最后保存您的user object

使用user.save()