mirror of
https://github.com/wasrusgen/zov-tech.git
synced 2026-06-03 15:04:50 +00:00
fix: после grant_role существующий dict не обновлял поле role
При входе менеджером (?role=manager) get_or_create_user обновлял CSV в Sheets, но в памяти существующего dict обновлял только roles[], а старое поле role оставалось со старым значением. _handle_me читал role и не находил 'manager' → fallback на client cabinet. Теперь после grant_role перечитываем строку из Sheets и обновляем оба поля (role + roles). Плюс в _handle_me предпочитаем roles[] если он уже распарсен.
This commit is contained in:
parent
4848b3a3ef
commit
865c3eaf40
@ -432,7 +432,9 @@ def _handle_me(body: dict[str, Any]) -> dict[str, Any]:
|
||||
start_param = body.get("startParam") or auth.get("start_param")
|
||||
explicit_role = body.get("role") if body.get("role") in ("manager", "client", "staff") else None
|
||||
user = sheets.get_or_create_user(tg_user, start_param, explicit_role)
|
||||
roles = sheets.parse_roles(user.get("role", ""))
|
||||
# Берём roles из словаря если они уже распарсены (после grant_role),
|
||||
# иначе fallback на парсинг сырой CSV-колонки
|
||||
roles = user.get("roles") or sheets.parse_roles(user.get("role", ""))
|
||||
|
||||
# Staff (замерщик / сборщик) — отдельный кабинет, доступен только тем у кого роль выдана
|
||||
if explicit_role == "staff":
|
||||
|
||||
@ -206,14 +206,18 @@ def get_or_create_user(tg_user: dict[str, Any], start_param: str | None,
|
||||
if tg_id == admin_id and not has_role(existing, "manager"):
|
||||
grant_role(tg_id, "manager")
|
||||
ensure_admin_manager(tg_user)
|
||||
existing["roles"] = parse_roles((find_user(tg_id) or {}).get("role", ""))
|
||||
fresh = find_user(tg_id) or {}
|
||||
existing["role"] = fresh.get("role", existing.get("role", ""))
|
||||
existing["roles"] = fresh.get("roles", [])
|
||||
# explicit_role из query (?role=manager|client|staff) — не перетираем уже выданные роли,
|
||||
# только добавляем если человек впервые открыл эту секцию
|
||||
elif explicit_role and explicit_role in VALID_ROLES and not has_role(existing, explicit_role):
|
||||
# client/manager — стандартные роли любой может получить через выбор в боте
|
||||
if explicit_role in ("manager", "client"):
|
||||
grant_role(tg_id, explicit_role)
|
||||
existing["roles"] = parse_roles((find_user(tg_id) or {}).get("role", ""))
|
||||
fresh = find_user(tg_id) or {}
|
||||
existing["role"] = fresh.get("role", existing.get("role", ""))
|
||||
existing["roles"] = fresh.get("roles", [])
|
||||
return existing
|
||||
|
||||
# Новый пользователь
|
||||
|
||||
Loading…
Reference in New Issue
Block a user