Как реализовать права доступа пользователей к API?
Здравствуйте!
Есть сайт на django. Он решает некую бизнес задачу. В некоторый момент понадобилось добавить к сайту еще функционала но на базе уже готового, а потом еще. В итоге это django приложение обрабатывает несколько доменов-сайтов, у которых общая бизнес логика, но разный пользовательский функционал.
Сейчас требуется еще добавить несколько доменов с возможным различным функционалом. Появилась идея, выделить общую логику в отдельный сервис, чтобы было легче (как кажется) привязывать новый домен со своим функционалом к бизнес логике.
На сайте также есть API в основном на работу с бизнес логикой, с разным уровнем доступности для пользователей сайта/сайтов на базе групп.
Собственно вопрос, как архитектурно правильно выделить отдельный сервис?
У меня такие варианты:
- В основном приложении будет реализован API Gateway на сервис и на нем будет проверка прав доступа к сервису
- В сервис должен получать информацию о аутентификации пользователя и его уровень доступа от приложения, но как это реализовать слабо представляю и смущает что возможно при каждом запросе ему придется запрашивать уровень доступа у приложения.
сервис должен получать информацию о аутентификации пользователя и его уровень доступа от приложения
- вот это немного настораживает. Просто обдумайте, возможна ли ситуация, когда приложение "обманет" насчёт уровня доступа.
Хотя в вопросе немало информации, но всё же в такой форме он слишком общий и расплывчатый. У вас уже нетривиальная система, и, наверное, никто кроме вас не знает её в подробностях. Так что, боюсь, никто лучше вас самого не даст вам совет насчёт архитектуры. :)
Нарисуйте для себя схему взаимодействия всего в вашей системе. Схема на бумаге помогает разложить по полочкам мысли в голове. Проработайте всякие случаи "а что будет, если..." И всё у вас получится правильно, вы же архитектор своей системы.
hint000, Спасибо большое за ответ! Приблизительно так я и сделал, только использовал draw.io =)
Решил основное приложение будет своего рода шлюзом для сервиса, но шлюз будет не только проксировать запросы и определять права доступа.