Это отличный вопрос.И ответ длинный :-) Я только что ответил на похожий вопрос здесь, чтобы вы могли начать читать это .
TL; DR
То, что вы ищете, этоназывается внешним / динамическим управлением авторизацией.Формальная модель называется управлением доступом на основе атрибутов ( abac / Wikipedia ).Он был официально оформлен Институтом стандартов и технологий (NIST).
Подробнее
Вы заявили:
Когда пользователь войдет в систему, он сможет создавать, редактировать и удалять задачи на своей панели инструментов, и никто не сможет просматривать или редактировать это.
Вам необходимо написать политику, используя атрибуты, которые позволятпользователи делают такие вещи и мешают им делать другие вещи.Если мы переписываем ваше требование, оно становится:
- Пользователь может создавать, редактировать и удалять элементы TODO на принадлежащей ему панели управления.
- Никто не может видеть элементы на панели управления.им не принадлежит.
Глядя на требования, вы понимаете, что у вас есть:
- субъект (или пользователь) с его атрибутами (например, роль, отдел ...))
- действие (например, просмотр, редактирование, удаление ...)
- объект или ресурс (элемент "TODO") и его контейнер (панель инструментов).
Это означает, что вы можете начать переписывать свои требования с точки зрения атрибутов.Это становится:
A user can do action == "view" on object of type == "TODO" if user.username == object.dashboard.owner
Затем можно добавить:
deny all access if object.dashboard.owner != user.username
Язык для написания таких политик называется ALFA ( alfa / Wikipedia , сокращенный язык для авторизации. Это стандарт, определенный OASIS XACML .
После того, как вы определили свои политики, вам нужно будет развернуть их, запустить и применить их. Вот где архитектура ABAC начинает действовать:
- Точка администрирования политики (PAP):где написаны политики
- Точка принятия решения о политике (PDP): где политики запускаются / выполняются
- Точка применения политики (PEP): где применяются политики - это может быть шлюз API, перехватчик...
- Точка информации о политике (PIP): где можно получить дополнительные метаданные и атрибуты
![The Attribute-Based Access Control (ABAC) Architecture](https://i.stack.imgur.com/tokju.png)
Вопросзатем становится: где вы хотите применить? Как выглядит ваша архитектура MERN?t авторизовать:
- в веб-интерфейсе?(функциональный authZ)
- на уровне API (транзакционный authZ)
- на уровне данных (ориентированный на данные authZ / filtering)
Например, выхотите отфильтровать данные из MongoDB и показывать только разрешенные результаты?Хотите применить авторизацию на уровне API?Шлюзы API (например, Kong) могут помочь вам достичь этого с помощью плагинов авторизации, например, Axiomatics-Kong .
Существуют реализации с открытым исходным кодом, коммерческие реализации ABAC и орган стандартизации (я являюсьредактор некоторых спецификаций, таких как запрос / ответ JSON / REST)