Как мы управляем доступом на проекте 🔐
В больших системах требуется гибкая и масштабируемая модель прав. Классическая проверка доступа строится вокруг ролей: пользователь получает одну или несколько ролей (например, admin, manager, viewer), и каждая роль содержит набор разрешений.
При использовании такого подхода появляются проблемы: - Роли начинают разрастаться и дублировать друг друга. - Возникают “почти одинаковые” роли с минимальными отличиями. - Сложно управлять точечными исключениями: если одному пользователю нужно дать доступ только к одной дополнительной кнопке, добавлять новую роль становится избыточно.
Чтобы решить эту задачу и избежать подобных проблем мы используем комбинацию RBAC (Role-Based Access Control) и permission-based подхода ⚙️
У нас есть два уровня:
1 уровень — группы пользователей (можно назвать их ролями: admin, manager, top-manager и т.д).
Это верхнеуровневая агрегация прав. Группа содержит набор доступных для неё permissions.
2 уровень — permissions (разрешение на выполнение действия)
Это атомарные флаги, которые описывают конкретное действие: - user.read - user.edit - order.create - order.cancel - feature.toggleX
Конечный пользователь в итоге получает список доступных permissions через включение его в группы + индивидуальные permissions.
Как это выглядит на frontend
После аутентификации backend возвращает список permissions пользователя. Frontend не работает напрямую с кодами групп/ролей — только с уже “развернутыми” permissions:
const canEdit = usePermission(‘user.edit’);
return {canEdit && editComponent};
Такой подход даёт баланс между управляемостью и гибкостью: роли упрощают администрирование, permissions позволяют точно контролировать поведение интерфейса, а изменение прав пользователей осуществляется без доработок front/back-сервисов ✨
#js #javascript #typescript #frontend #фронтенд #разработка #dev #webdev #react #nodejs #backend #rbac #permissions
· 26.07
Так это база проверять по пермишну, а не по группе. Группы нужны только для удобства настройки и упрощения рутины. Но бывают временные и персональные права.
Кстати, а почему аргумент юзера не передается, а только пермишн?)
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответить
0
коммент удалён
· 28.07
Спасибо за отличный вопрос! В статье рассмотрен вариант permission к определенному действию (добавлять/удалять какую-то сущность).
Когда доступа более гибкие - типа может редактировать одного юзера, но не может другого: тогда такие permission приходят от бэка в привезке к конкретному юзеру. Соответственно на фронте проверка выглядит немного иначе чем в примере
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответить
0
ответ удалён