Применение разрешений Django на основе запроса и модели

TL;DR;

Есть ли в Django возможность автоматически проверять разрешения пользователя/запроса на соответствие разрешениям по умолчанию (добавление, изменение, просмотр, удаление) перед выполнением запроса?


Я новичок в Django, и я пытаюсь использовать разрешения Django в своих приложениях без фактического написания кода для каждого представления/запроса (post/...). У меня много групп с достоверностью связанных с ними разрешений, и очень сложно проверить каждое из этих разрешений.

Допустим, у меня есть модель с именем Article и группа с именем readers только с одним разрешением: article.read_article; А на главной странице есть форма, которую можно использовать для добавления новых статей.

Есть ли способ запретить пользователям в группе reader добавлять новые статьи с помощью этой формы без фактического написания кода для нее? Например, на основе задействованных запросов, групп, разрешений и моделей. Или напишите что-нибудь в модели, чтобы проверить все необходимые разрешения перед выполнением запроса.


person Ravexina    schedule 23.03.2021    source источник


Ответы (1)


Есть несколько способов добиться этого.

  1. В вашем шаблоне формы отображаются только для пользователя, у которого есть разрешение на создание статьи.

  2. Создайте предварительно сохраненный обработчик signal. Получить ссылку на текущего пользователя. Проверьте разрешение пользователя. Если у пользователя нет разрешений, возникает исключение. Вызов исключения предотвратит сохранение записи.

person ABN    schedule 23.03.2021
comment
Я знаю это. Я просто не хочу касаться взглядов в любой форме. Я хочу оставить это для моделей (на основе этого запроса (пользователь), должен ли я выполнять этот запрос или нет). И у меня есть много пользовательских разрешений. Это действительно не отвечает на мой вопрос. Однако, спасибо :) - person Ravexina; 23.03.2021
comment
@Ravexina, вы имеете в виду, что при сохранении записи необходимо выполнить проверку разрешений? - person ABN; 23.03.2021
comment
В зависимости от запроса, по крайней мере, базовая проверка разрешений должна происходить автоматически (добавить, изменить, просмотреть, удалить). Это то, что я ищу. Я не уверен, что это вообще возможно. Просто любопытно. - person Ravexina; 23.03.2021
comment
@Ravexina, вы можете использовать сигналы pre_save. - person ABN; 23.03.2021
comment
@Ravexina Это возможно. вы можете использовать сигналы pre_save. Вам нужно получить ссылку на пользователя в вашем обработчике сигналов. А в обработчике можно проверить, есть ли у пользователей разрешение. - person ABN; 23.03.2021