HyperLEDA / db-app

Backend for HyperLeda astronomical database of extragalactic objects
https://hyperleda.github.io/db-app/
MIT License
0 stars 0 forks source link

Продумать ограничение доступа к `/api/v1/admin` методам #109

Closed Kraysent closed 3 months ago

Kraysent commented 4 months ago

Сейчас по поводу пользователей есть очень базовая таблица users. Нужно продумать процесс регистрации и проверки пользователей для того чтобы ограничить список людей, которые могут редактировать данные.

Предположение - нужно будет добавить столбец role в таблицу пользователей и руками проставить admin, по дефолту reader или что-то такое. В иделае это проверять бы на уровне nginx, но тут надо подумать.

Kraysent commented 4 months ago

Пока идея следующая:

Список пользователей в production-окружении будет руками вставлен в базу, регистрации пользователей пока не предусматриваем.

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

В каждом методе API в таком случае перечислим список ролей, которым разрешён доступ до данного метода.

Итого flow вызова администраторских методов следующий:

Для унификации и изоляции ответственности стоит сделать класс Authenticator (над названием подумать), который будет при старте программы подключаться к бд и будет уметь делать всё перечисленное выше. В итоге в бизнес-логике хочется только вызывать

user_id, role = authenticator.authenticate(token)

и больше ничего не делать, Authenticator должен попадать через инъекцию зависимостей внутрь Actions, примерно в этот же момент хочется уметь манипулировать его активностью флагом в конфиге. Можно сделать красиво и сделать Authenticator интерфейсов с двумя реализациями - PostgresAuthenticator, который будет по-настоящему ходить в БД и разбираться с токенами, и NopAuthenticator, который будет в соответствующем методе ничего не делать. Тогда если флаг включения аутентификации включен, внедряем PostgresAuthenticator, если нет - NopAuthenticator.