Таблица типов содержимого Django — разрешение авторизации

Я хочу добавить разрешение в таблице auth_permission. Когда я вставляю другое разрешение вручную, мне также нужно вставить content_type_id. Это относится к таблице content_type. Я не знаю, что он делает. Я хочу удалить набор строк HTML, если у пользователя нет такого разрешения. В чем важность content_type_id?


person PythonEnthusiast    schedule 01.01.2014    source источник


Ответы (1)


«content_type_id» — это имя поля, определенное Django.

Поле является отношением внешнего ключа к экземпляру ContentType.

Важность этого поля заключается в том, что оно обозначает объект, к которому применяется разрешение (из исходного кода django 1.7.11):

Разрешения устанавливаются глобально для каждого типа объекта, а не для конкретного экземпляра объекта. Можно сказать: «Мэри может изменить новости...

В приведенной выше цитате поле типа контента будет отношением внешнего ключа к «новой истории».

В вашем случае вы хотите иметь возможность контролировать, увидит ли кто-то фрагмент HTML. Вы можете создать пользовательскую модель для определения своего разрешения, например:

class MyPermObject(models.Model):
    pass

А затем создайте указанное разрешение следующим образом:

content_type = ContentType.objects.get_for_model(MyPermObject)
permission = Permission.objects.create(codename='can_see_html', name='Can see my HTML', content_type=content_type)

См. документы django, чтобы узнать, как запросить разрешение пользователя: https://docs.djangoproject.com/en/1.9/topics/auth/default/#topic-authorization

person Ytsen de Boer    schedule 13.01.2016