У меня есть база данных объектов, и у каждого из объектов есть несколько разрешений на просмотр, редактирование и т. Д. Следующий пример представляет собой упрощенную версию полной модели.
class Warehouse(models.Model):
...
view_permission = models.ForeignKey(Permission, ...)
edit_permission = models.ForeignKey(Permission, ...)
...
Когда объект создан, посылается сигнал pre_save, чтобы создать и заполнить эти поля разрешений. Обработчик сигнала также создает группу с некоторыми созданными разрешениями.
Моя проблема в том, что когда я назначаю пользователя одной из этих динамически созданных групп, я не могу понять, как проверить, есть ли у пользователя это конкретное разрешение.
Я пытался сделать следующее:
> from django.contrib.auth.models import User
> from myapp.models import Warehouse
> w = Warehouse.objects.get(pk=1) # get the first object
> u = User.objects.get(username='jhon') # get a user
Пользователь john
принадлежит группе, в которой установлены разрешения w
.
Если я использую user.get_all_permissions()
, он возвращает набор строк.
Если я использую user.has_perm(w.view_permission)
, возвращается false.
Единственный способ, которым мне удалось это сделать, - набрать
> p = w.view_permission
> user.has_perm('%s.%s' % (p.content_type.app_label, p.codename))
True
Но это некрасиво и почему-то кажется неправильным.
Ребята, вы не знаете, как правильно проверить эти разрешения?