2015-08-13 3 views
2

У меня проблема с удалением разрешений пользователям в поле зрения или даже в оболочке. Позвольте мне объяснить мою проблему:Убрать разрешения пользователя (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')` 

возвращается 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") 

(после удаления разрешения, пользователь по-прежнему имеет его)

То, что я хочу сделать заключается в том, чтобы удалить разрешение от пользователя и сразу же добавить другое разрешение тому же пользователю. Но каждый раз, когда я делаю это, пользователь по-прежнему имеет «удалить разрешение» ......

Большое спасибо

Я с нетерпением ожидаю услышать от вас все в ближайшее время.

ответ

6

Такое поведение ожидается, поскольку разрешения кэшируются. Из документов Джанго:

Permission caching

ModelBackend кэширует разрешения на объект пользователя после того, как в первый раз, они должны быть выбраны для разрешений, проверки. Обычно это нормально для цикла запроса-ответа, поскольку разрешения обычно не проверяются сразу после их добавления (например, в админе). Если вы добавляете разрешения и проверяете их сразу же после этого, например, в тесте или представлении, самым простым решением является повторная выборка пользователя из базы данных.

Смежные вопросы