Проверка разрешений в шаблоне django - PullRequest
0 голосов
/ 20 марта 2019

У меня есть база данных объектов, и у каждого из объектов есть несколько разрешений на просмотр, редактирование и т. Д. Следующий пример представляет собой упрощенную версию полной модели.

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

Но это некрасиво и почему-то кажется неправильным.

Ребята, вы не знаете, как правильно проверить эти разрешения?

...