Conversation
|
💩 Code linting failed, use |
|
💩 Code linting failed, use |
|
выше скрины как выглядит админка |
There was a problem hiding this comment.
А как эти изменения относятся к админ-панели ?
There was a problem hiding this comment.
Я использовал для работы с админкой тот же код при создании/изменении/удалении, не хотел одно и то же два раза писать, тем более если поменяем логику в них где-то, не потребуется в двух местах менять
There was a problem hiding this comment.
если что, я ничего не менял, только вынес логику в отдельные функции
| class AdminAuth(AuthenticationBackend): | ||
| async def login(self, request: Request) -> bool: | ||
| form = await request.form() | ||
| username = form.get("username") | ||
| password = form.get("password") | ||
| if username == settings.ADMIN_LOGIN and password == settings.ADMIN_PASSWORD: | ||
| request.session["user"] = username | ||
| return True | ||
| return False | ||
|
|
||
| async def logout(self, request: Request) -> bool: | ||
| request.session.clear() | ||
| return True | ||
|
|
||
| async def authenticate(self, request: Request) -> bool: | ||
| user = request.session.get("user") | ||
| return user is not None |
There was a problem hiding this comment.
Не, так не пойдет. Надо использовать наш аутх и завязать методы login и authenticate на наши внутренние скоупы.
- Можно передавать токен наш в форму авторизации sqladmin как-то, сделая кастомную форму (с нейронкой мне кажется изи делается)
- Брать наш токен из локал стораджа, но хз, распространяется ли локалсторадж куда-то дальше app.profcomff.com
There was a problem hiding this comment.
ок, подумаю как сделать, тогда вероятно и проблема выше с UnionAuth уйдет
| KAFKA_TIMEOUT: int = 2 | ||
| KAFKA_LOGIN: str | None = None | ||
| KAFKA_PASSWORD: str | None = None | ||
| ADMIN_SECRET_KEY: str | None = None |
There was a problem hiding this comment.
После мерджа все упадет на том, что в админку не проставится secret key, поэтому тут лучше сделать его либо обязательным:
ADMIN_SECRET_KEY: strЛибо проставить какой-то дефолт
ADMIN_SECRET_KEY: str = "default"| column_sortable_list = ["id", "name"] | ||
| column_default_sort = [("id", False)] | ||
| form_excluded_columns = ["create_ts", "update_ts", "groups", "user_sessions", "is_deleted"] | ||
| can_create = False # I don't know how to use UnionAuth there to get user_id that is required |
There was a problem hiding this comment.
Такая ситуация: для создания скоупа необходимо получать creator_id, который получается из UnionAuth, но так как пока что не знаю как его привязать, то и передавать айдишник пользователя не могу
|
💩 Code linting failed, use |



Изменения
Добавлена sqladmin-админка для управления скоупами, группами и пользователями(только работа с группами для пользователей)
Детали реализации
Для аутентификации в админке используется AdminAuth с логином и паролем из .env (ADMIN_LOGIN, ADMIN_PASSWORD, ADMIN_SECRET_KEY).
Логика изменения групп у пользователя и CRUD-операций над группами вынесена в отдельные функции (patch_user_groups, create_group_logic, patch_group_logic, delete_group_id) и используется как эндпоинтах, так и в админке.
Для работы с soft delete переопределены методы update_model, delete_model, insert_model.
Удалённые записи скрыты из списков через list_query и count_query, а из форм — через FilteredModelConverter.
Проблемы, которые присутствуют в текущей версии:
не знаю как получать user_id из UnionAuth для создания скоупа
не уверен, что текущая версия авторизации в админке является корректной
вероятно надо добавить не только возможность работы с управлением скоупами, но и все, что есть в аутхе(может возникнуть проблема с полным доступом ко всем данным аута и возможностью делать с ними что угодно)