sqladmin админка#251
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"| with: | ||
| requirementsFiles: "requirements.txt requirements.dev.txt" | ||
| - uses: psf/black@stable | ||
| - uses: psf/black@23.11.0 |
There was a problem hiding this comment.
Чем stable не устроил ?
И как эти изменения относятся к этому ПРу ?
There was a problem hiding this comment.
падает линтинг с последней версией блека, которая вышла где-то в феврале, так что теперь во всех репозитория для корректного форматирования используем конкретную версию с которой все грамотно работает
В этот пр добавил, так как глупо создавать отдельный пр под небольшую задачку
There was a problem hiding this comment.
Надо не версию библиотеки подстраивать под репозиторий, а репозиторий подстроить под версию библиотеки. Сделай отдельный ПР, где сделаешь линтинг stable-версией black-а
|
💩 Code linting failed, use |
|
💩 Code linting failed, use |
|
💩 Code linting failed, use |
| return True | ||
|
|
||
| async def authenticate(self, request: Request) -> bool: | ||
| token = request.session.get("token") |
There was a problem hiding this comment.
22 строка в этом файле, я сам записал токен туда : request.session["token"] = token



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