Джанго: Развязка Разрешения-Check из Вызова View
Я хотел отвязать разрешение проверки в Джанго.Джанго: Развязка Разрешение-Check из Вызова View
Текущий откат: если вы используете декораторы, такие как login_required, то вы не можете заранее знать, имеет ли пользователь разрешение на это или нет.
Я хотел бы разделить это на два этапа:
- проверки прав доступа
- вызова вид.
Use Case 1: инструмент администратора
Я хочу инструмент для администраторов, где они могут проверить разрешения_доступ пользователей. Для этого требуется:
- Проверка не должна использовать текущий
request.user
, так как это неправильный пользовательский объект. - Проверка не должна фактически вызывать представление, так как это может изменить данные.
Использование варианта 2: Показать ссылку как отключенную.
Я хочу показать ссылки как отключенные (выделенные серым цветом и без «href»), если у пользователя нет разрешения на просмотр связанной страницы.
Сон
Возвращение булево для «хорошо» и «разрешение отказано» приятно. Но большая выгода была бы, если бы администратор мог получить разум.
Пример: открывает
- Admin "Check Пермь Tool"
- Он выбирает вид/URL
- хиты админ "Submit"
Результат:
------------------------------
| User | Allowed | Reason
------------------------------
| fooadmin | Yes | is_superuser
| foouser | No | missing permission "view-bar-at-midnight"
| foobar | Yes | User has permission "view-bar-at-midnight"
Вопрос
Как осуществить эту мечту?
... Просто для записей, я отправил идею о Джанго-разработке списка: https://groups.google.com/forum/#!topic/django-developers/rpTh4G3BgIQ
Его неясно, что вы спрашиваете о, если пользователь не вошел в систему, то они не имеют права – Sayse
@Sayse от того, что я понимаю, guettli хочет функция «Просмотр веб-сайта как X» (где X - любой пользователь). –
Итак, я не уверен, как вы хотите, чтобы проверка разрешений работала в ** Использовать случай 1 **. Если вы в порядке с интерфейсом администратора Django, в 'http: // domain/admin', то это решается путем добавления логической переменной (или некоторого значения, если у вас больше разновидностей разрешений) для разрешений в вашей модели пользователя, которые вы можете просмотреть в таблице интерфейса администратора с использованием [Model Admin Object] (https://docs.djangoproject.com/en/1.9/ref/contrib/admin/#modeladmin-objects) в 'admin.py'. –