Права доступа начинаются в API, а не в меню

Скрытый пункт меню делает интерфейс понятнее, но доступ решается на сервере. Возьмём рабочее пространство с руководителями, операторами и пользователями, которым разрешено только чтение.

Начать с действий, а не названий ролей

Сначала выпишите действия: посмотреть запись, изменить её, подтвердить запрос, выгрузить отчёт. Затем определите, какие роли выполняют каждое действие и с какими записями. Само название роли оставляет слишком много места для разных трактовок.

Сделать серверное решение явным

Для чувствительного запроса проверяйте и пользователя, и объект. Аутентификация отвечает, кто отправляет запрос; авторизация — разрешено ли конкретное действие. В Django статус staff и права на модель решают разные части этой задачи.

Объяснить доступ в интерфейсе

React может скрывать недоступные действия и объяснять, почему кнопка отключена. Это полезная обратная связь, которая не заменяет проверку API. Одинаковые названия действий помогают связать право интерфейса с понятным серверным правилом.

Проверить неудобные сценарии

Разделите проверки анонимного пользователя, обычного аккаунта и администратора. Попробуйте прямой URL, другой идентификатор записи и запрос без открытия страницы. Проверьте также потерю роли и выход из аккаунта.

Оставить правила проверяемыми

Небольшую матрицу доступа проще проверить, чем правила, разбросанные по экранам. Для нового действия одновременно обновляйте матрицу, серверную проверку и поведение интерфейса. Конкретные правила доступа к объектам зависят от продукта.

Аутентификация и права доступа Django

Подпишитесь

Новые статьи, лекции и уроки — в моём телеграм-канале @ruzibaev921.