Я видел много дискуссий об использовании django-guardian с django-polymorphic, но меня это очень сбивает с толку.
Представьте себе такой случай:
class FeedPost(PolymorphicModel):
class Meta:
default_permissions = ('add', 'change', 'delete', 'view')
class ArticleFeedPost(FeedPost):
class Meta:
default_permissions = ('add', 'change', 'delete', 'view')
В django-guardian 1.4.6, когда вы устанавливаете разрешения для ArticleFeedPost, эти разрешения не применяются к FeedPost.
В документе говорится о полиморфных объектах:
http://django-guardian.readthedocs.io/en/stable/configuration.html?highlight=polymorph#guardian -get-content-type
Но нет примера, описывающего, как использовать get_default_content_type.
Мои вопросы (кстати, извините, что задаю эти вопросы здесь, но у меня больше шансов получить ответ здесь, чем где-либо еще):
Привет,
Это специфическая проблема с джанго-полиморфизмом. django-polymorphic
содержит код для поддержки django-guardian, поэтому ищите django-polymorphic docs о поддержке.
Привет,
CC: @benkonrath
Что касается вопросов управления версиями, рада сообщить, что принимает во внимание. В следующих релизах будет исправлено. GUARDIAN_GET_CONTENT_TYPE
был выпущен в django 1.4.6.
@BenDevelopment Функция для получения типа содержимого базовой модели только недавно была объединена с django-polymorphic. Использование типа содержимого базовой модели приведет к тому, что разрешения хранителя будут работать в базовой модели. Вам просто нужно добавить этот параметр, если вы используете последнюю выпущенную версию django-guardian и последнюю версию django-polymorphic от git:
GUARDIAN_GET_CONTENT_TYPE = 'polymorphic.contrib.get_polymorphic_base_content_type'
Вы также можете скопировать и вставить код get_polymorphic_base_content_type
в свой собственный проект, если вы не хотите использовать последнюю версию git django-polymorphic.
Вот невыпущенные документы:
https://django-polymorphic.readthedocs.io/en/latest/third-party.html#django -guardian-support
@BenDevelopment Correction, настройка должна быть:
GUARDIAN_GET_CONTENT_TYPE = 'polymorphic.contrib.guardian.get_polymorphic_base_content_type'
Я собираюсь сделать PR полиморфизма, чтобы исправить это в документации.
Спасибо вам, ребята! Все работает хорошо 💯!