Предположим...
СИнтетический пример. У нас есть пользователи. У пользователей есть блокноты.
class Pad(Model):
name = CharField()
В блокнотах есть записи:
class Post(Model):
name = CharField()
text = textField()
pad = ForeignKey(Pad)
А к записям есть набор картинок:
class Img(Model):
img = ImageField()
post = ForeignKey(Post)
Как принято в django контроллировать доступ?
Сниппетом (да, я его забил в сниппеты) сразу генерю crud -ListView-DetailVIew-CreateView-UpdateView. Но как красиво дать доступ только владельцу?
Можно переопределить get_query_set. И для каждой вьюхе в нем запрашивать пользователя и фильтровать записи по нему. Слишком много кода. А для последнего в дереве связей - Img - вообще супердлинная цепочка доступа к владельцу блокнота, а уж в какой запрос это превращает орм - лучше не смотреть.
Можно в каждую модель добавить ключ на юзера - тогда можно сделать миксин на проверку сразу для всех, отнаследовав свои cbv. (А может есть модуль, который автоматом может проставлять владельца? Магия, но мало ли.)
Как лучше? Как вы решаете проблему?
У меня частенько бывало, что я просто забывал об этой фильтрации, пока меня не пинал тестер. Хочется максимально автомагического способа, что бы забыть об этом а всё было хорошо.
Кажется в джанге такой вопрос по-умолчанию не решен.
И добавив нерелевантные теги, я надеюсь, кто-нибудь расскажет, как это реализвано в других фреймворках.