mirror of
https://github.com/wasrusgen/zov-tech.git
synced 2026-06-03 19:04:49 +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")
|
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
|
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)
|
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 (замерщик / сборщик) — отдельный кабинет, доступен только тем у кого роль выдана
|
# Staff (замерщик / сборщик) — отдельный кабинет, доступен только тем у кого роль выдана
|
||||||
if explicit_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"):
|
if tg_id == admin_id and not has_role(existing, "manager"):
|
||||||
grant_role(tg_id, "manager")
|
grant_role(tg_id, "manager")
|
||||||
ensure_admin_manager(tg_user)
|
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) — не перетираем уже выданные роли,
|
# explicit_role из query (?role=manager|client|staff) — не перетираем уже выданные роли,
|
||||||
# только добавляем если человек впервые открыл эту секцию
|
# только добавляем если человек впервые открыл эту секцию
|
||||||
elif explicit_role and explicit_role in VALID_ROLES and not has_role(existing, explicit_role):
|
elif explicit_role and explicit_role in VALID_ROLES and not has_role(existing, explicit_role):
|
||||||
# client/manager — стандартные роли любой может получить через выбор в боте
|
# client/manager — стандартные роли любой может получить через выбор в боте
|
||||||
if explicit_role in ("manager", "client"):
|
if explicit_role in ("manager", "client"):
|
||||||
grant_role(tg_id, explicit_role)
|
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
|
return existing
|
||||||
|
|
||||||
# Новый пользователь
|
# Новый пользователь
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user