2015-08-13 144 views
2

我有一個問題,即刪除用戶在視圖中甚至在shell中的權限。讓我解釋一下我的問題:刪除用戶的權限(django)

我的確在外殼那些測試:

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')` 

it returns

但是當我重寫:

org = Organisateur.objects.get(user__username__contains="ghj") 
org.user.has_perm('inscription.ecriture_Palaiseau')` 

返回False

這實在是不可思議。它爲什麼這樣工作?

在我的意見,似乎就算我做的寫權限不會被刪除:

org = Organisateur.objects.get(user__username__contains="ghj") 

(刪除權限之後,用戶仍然有它)

我想要做什麼是從用戶中刪除一個權限,然後立即向同一用戶添加另一個權限。 但每次我這樣做,用戶仍然具有「刪除權限」 ......

非常感謝您

我期待着儘快得到您的所有來信。

回答

6

此行爲是預期的,因爲權限被緩存。從Django文檔:

Permission caching

的ModelBackend他們第一次需要取的權限檢查之後緩存用戶對象的權限。對於請求響應週期來說,這通常很好,因爲權限添加後通常不會被立即檢查(例如在管理員中)。如果您正在添加權限並在之後立即檢查它們,例如在測試或視圖中,最簡單的解決方案是從數據庫中重新獲取用戶。