Скрытый пункт меню делает интерфейс понятнее, но доступ решается на сервере. Возьмём рабочее пространство с руководителями, операторами и пользователями, которым разрешено только чтение.
Начать с действий, а не названий ролей
Сначала выпишите действия: посмотреть запись, изменить её, подтвердить запрос, выгрузить отчёт. Затем определите, какие роли выполняют каждое действие и с какими записями. Само название роли оставляет слишком много места для разных трактовок.
Сделать серверное решение явным
Для чувствительного запроса проверяйте и пользователя, и объект. Аутентификация отвечает, кто отправляет запрос; авторизация — разрешено ли конкретное действие. В Django статус staff и права на модель решают разные части этой задачи.
Объяснить доступ в интерфейсе
React может скрывать недоступные действия и объяснять, почему кнопка отключена. Это полезная обратная связь, которая не заменяет проверку API. Одинаковые названия действий помогают связать право интерфейса с понятным серверным правилом.
Проверить неудобные сценарии
Разделите проверки анонимного пользователя, обычного аккаунта и администратора. Попробуйте прямой URL, другой идентификатор записи и запрос без открытия страницы. Проверьте также потерю роли и выход из аккаунта.
Оставить правила проверяемыми
Небольшую матрицу доступа проще проверить, чем правила, разбросанные по экранам. Для нового действия одновременно обновляйте матрицу, серверную проверку и поведение интерфейса. Конкретные правила доступа к объектам зависят от продукта.