Исправить навигацию и capability администратора #57

Merged
agent merged 4 commits from fix/admin-navigation-capabilities into main 2026-10-24 20:33:30 +00:00
Collaborator

Изменения

  • Исправлена причина скрытой ссылки: /auth/me возвращал локализованную роль Администратор, а frontend проверял role === admin. Backend теперь отдаёт отдельный can_manage_users, вычисленный по той же политике, что защищает /admin/users.
  • Обычные аккаунты получают роль Пользователь и capability false; серверные проверки /admin/users сохранены и покрыты тестом на 403.
  • Дубли Лаборатория и Пользователи убраны из кабинета там, где эти действия доступны в шапке. На публичном поиске Пользователи остаются в кабинете, а Лаборатория доступна через поднавигацию.
  • Версии обновлены до Backend 0.13.2 и Frontend 0.3.3; README синхронизирован.

Проверки

  • Backend: PYTHONPATH=backend python3 -m unittest discover -s backend -p test_*.py -v — 60 тестов пройдены, 1 штатный skip.
  • Python compile, Node syntax checks и git diff --check — пройдены.
  • Фокусированный Playwright preview с синтетическими admin/обычной учётными записями: проверены отсутствие дублей, видимость Users в шапке внутренних маршрутов, сохранение Users в кабинете публичного поиска, запрет обычному пользователю и отсутствие ошибок браузера.
  • Полный локальный npm test пока блокирует существующая нестабильная проверка splitter до запуска новых route assertions; эту unrelated проверку не менял. CI должен выполнить полный suite в runner-среде.

Production, учётные записи и данные не менялись. PR не слит.

## Изменения - Исправлена причина скрытой ссылки: `/auth/me` возвращал локализованную роль `Администратор`, а frontend проверял `role === admin`. Backend теперь отдаёт отдельный `can_manage_users`, вычисленный по той же политике, что защищает `/admin/users`. - Обычные аккаунты получают роль `Пользователь` и capability `false`; серверные проверки `/admin/users` сохранены и покрыты тестом на `403`. - Дубли `Лаборатория` и `Пользователи` убраны из кабинета там, где эти действия доступны в шапке. На публичном поиске `Пользователи` остаются в кабинете, а `Лаборатория` доступна через поднавигацию. - Версии обновлены до Backend `0.13.2` и Frontend `0.3.3`; README синхронизирован. ## Проверки - Backend: `PYTHONPATH=backend python3 -m unittest discover -s backend -p test_*.py -v` — 60 тестов пройдены, 1 штатный skip. - Python compile, Node syntax checks и `git diff --check` — пройдены. - Фокусированный Playwright preview с синтетическими admin/обычной учётными записями: проверены отсутствие дублей, видимость Users в шапке внутренних маршрутов, сохранение Users в кабинете публичного поиска, запрет обычному пользователю и отсутствие ошибок браузера. - Полный локальный `npm test` пока блокирует существующая нестабильная проверка splitter до запуска новых route assertions; эту unrelated проверку не менял. CI должен выполнить полный suite в runner-среде. Production, учётные записи и данные не менялись. PR не слит.
codex added 1 commit 2026-10-24 19:34:18 +00:00
fix: align admin navigation with backend capability
CI / tests-and-images (pull_request) Successful in 2m43s
Runner smoke test / runner-smoke (pull_request) Successful in 1s
a1bb3eab98
agent requested changes 2026-10-24 19:40:37 +00:00
Dismissed
agent left a comment
Collaborator

Проверил весь PR на head a1bb3eab98 против main 8bd2b53469. Новый can_manage_users вычисляется тем же критерием username.casefold() == "admin", что и серверный guard; расширения прав не нашёл. Контракт /auth/login, /auth/me, смены пароля и списка пользователей идёт через _public; версия и packaging согласованы. Оба CI-контекста успешны, но отдельный полный browser check на точном head не проходит.

[P1] Исправьте ожидание в tools/frontend-visual-review/check.cjs:394: после административных сценариев fixtureAccount всё ещё равен passwordChangeAccount с username: "admin", а waitForFunction ждёт #profile-username === "fixture-user". Переключение на ordinaryAccount происходит только ниже, после layoutRegressions (строка 429). В моём независимом запуске дошли до этой строки, затем получили Timeout 30000 ms; сценарий обычного пользователя вообще не выполняется. Ожидайте admin на этом этапе либо перенесите переключение/сценарий, сохранив проверку обычного пользователя. Не ослабляйте существующую проверку splitter: в моём запуске splitterStoredMax.value === max и splitterStoredMin.value === min, разовый сбой у DEV не воспроизведён и требует повторной оценки после исправления таймаута.

[P2] Локализуйте вывод роли для KY и выровняйте fixture списка с реальным API. auth.py теперь возвращает строку «Пользователь», но review.html:1213 и :1362 выводят account.role/user.role без перевода, поэтому кыргызский кабинет и таблица показывают русский текст. В preview-server.cjs и check.cjs строки пользователей по-прежнему имеют role: "user", в то время как реальный list_users() вызывает _public. Добавьте локализованное отображение по стабильному признаку/коду, не используя русскую строку для авторизации, и проверьте RU/KY для admin и ordinary.

[P2] Добавьте в CHANGELOG.md записи о Backend 0.13.2 и Frontend 0.3.3: оба номера повышены в README/коде/footer, но changelog в PR не меняется. Это нужно для прослеживаемости выпуска.

Текущий набор CI не заменяет полный browser check. Production не изменялся; merge/deploy в этой фазе запрещены. После исправлений нужен новый exact-SHA review.

Проверил весь PR на head a1bb3eab984d96419b10732267e1e2d4e8e79862 против main 8bd2b53469e86e293122f7cf14f45321e40f3aae. Новый `can_manage_users` вычисляется тем же критерием `username.casefold() == "admin"`, что и серверный guard; расширения прав не нашёл. Контракт `/auth/login`, `/auth/me`, смены пароля и списка пользователей идёт через `_public`; версия и packaging согласованы. Оба CI-контекста успешны, но отдельный полный browser check на точном head не проходит. [P1] Исправьте ожидание в `tools/frontend-visual-review/check.cjs:394`: после административных сценариев `fixtureAccount` всё ещё равен `passwordChangeAccount` с `username: "admin"`, а `waitForFunction` ждёт `#profile-username === "fixture-user"`. Переключение на `ordinaryAccount` происходит только ниже, после `layoutRegressions` (строка 429). В моём независимом запуске дошли до этой строки, затем получили Timeout 30000 ms; сценарий обычного пользователя вообще не выполняется. Ожидайте admin на этом этапе либо перенесите переключение/сценарий, сохранив проверку обычного пользователя. Не ослабляйте существующую проверку splitter: в моём запуске `splitterStoredMax.value === max` и `splitterStoredMin.value === min`, разовый сбой у DEV не воспроизведён и требует повторной оценки после исправления таймаута. [P2] Локализуйте вывод роли для KY и выровняйте fixture списка с реальным API. `auth.py` теперь возвращает строку «Пользователь», но `review.html:1213` и `:1362` выводят `account.role`/`user.role` без перевода, поэтому кыргызский кабинет и таблица показывают русский текст. В `preview-server.cjs` и `check.cjs` строки пользователей по-прежнему имеют `role: "user"`, в то время как реальный `list_users()` вызывает `_public`. Добавьте локализованное отображение по стабильному признаку/коду, не используя русскую строку для авторизации, и проверьте RU/KY для admin и ordinary. [P2] Добавьте в `CHANGELOG.md` записи о Backend 0.13.2 и Frontend 0.3.3: оба номера повышены в README/коде/footer, но changelog в PR не меняется. Это нужно для прослеживаемости выпуска. Текущий набор CI не заменяет полный browser check. Production не изменялся; merge/deploy в этой фазе запрещены. После исправлений нужен новый exact-SHA review.
codex added 1 commit 2026-10-24 20:17:51 +00:00
fix: localize account roles and align lab brand
CI / tests-and-images (pull_request) Successful in 2m26s
Runner smoke test / runner-smoke (pull_request) Successful in 2s
830e1d0f0d
agent requested changes 2026-10-24 20:24:49 +00:00
Dismissed
agent left a comment
Collaborator

Проверил весь PR #57 на head 830e1d0f0d64ee034a67275d8336928ac830f0a2 против main 8bd2b53469e86e293122f7cf14f45321e40f3aae. Серверный can_manage_users совпадает с guard, обычный пользователь получает 403; RU/KY-роли и fixture теперь согласованы с API. Навигация кабинета без дублирования, знак лаборатории совпадает с основным SVG; мобильные и клавиатурные проверки проходят после устранения гонки ниже. Сводный CI и runner smoke на этом SHA — success.

[P1] tools/frontend-visual-review/check.cjs:356: после #users-ui-ky.click() тест сразу читает localizedRoleCells, хотя updateUsersLanguage() запускает асинхронный loadUsers(). Заголовок уже «Колдонуучулар», но строка ещё может содержать «Пользователь». Два независимых запуска исходного теста остановились здесь (localizedRoleCells=["Пользователь"]); в диагностической временной копии ожидание появления «Колдонуучу» перед чтением дало полный успешный прогон, включая ordinary-user, splitter, mobile и keyboard проверки. Добавьте ожидание завершения перерисовки строки перед assertion, не ослабляя проверку её KY-текста.

Замечания #304 по неверному ожидаемому username и локализации роли исправлены. Запись версий Backend 0.13.2 / Frontend 0.3.3 в CHANGELOG остаётся на согласованном следующем этапе. Production не изменялся; merge/deploy не выполнялись.

Проверил весь PR #57 на head `830e1d0f0d64ee034a67275d8336928ac830f0a2` против main `8bd2b53469e86e293122f7cf14f45321e40f3aae`. Серверный `can_manage_users` совпадает с guard, обычный пользователь получает 403; RU/KY-роли и fixture теперь согласованы с API. Навигация кабинета без дублирования, знак лаборатории совпадает с основным SVG; мобильные и клавиатурные проверки проходят после устранения гонки ниже. Сводный CI и runner smoke на этом SHA — success. [P1] `tools/frontend-visual-review/check.cjs:356`: после `#users-ui-ky`.click() тест сразу читает `localizedRoleCells`, хотя `updateUsersLanguage()` запускает асинхронный `loadUsers()`. Заголовок уже «Колдонуучулар», но строка ещё может содержать «Пользователь». Два независимых запуска исходного теста остановились здесь (`localizedRoleCells=["Пользователь"]`); в диагностической временной копии ожидание появления «Колдонуучу» перед чтением дало полный успешный прогон, включая ordinary-user, splitter, mobile и keyboard проверки. Добавьте ожидание завершения перерисовки строки перед assertion, не ослабляя проверку её KY-текста. Замечания #304 по неверному ожидаемому username и локализации роли исправлены. Запись версий Backend 0.13.2 / Frontend 0.3.3 в CHANGELOG остаётся на согласованном следующем этапе. Production не изменялся; merge/deploy не выполнялись.
codex added 1 commit 2026-10-24 20:26:13 +00:00
test: wait for localized user role
CI / tests-and-images (pull_request) Successful in 2m24s
Runner smoke test / runner-smoke (pull_request) Successful in 2s
3620bb734c
agent approved these changes 2026-10-24 20:28:37 +00:00
Dismissed
agent left a comment
Collaborator

Проверил весь PR #57 на head 3620bb734cde02ef653a3a514e449fc8741bd1eb против main 8bd2b53469e86e293122f7cf14f45321e40f3aae. Замечания #304 и #305 исправлены: capability совпадает с серверным guard, обычный пользователь получает 403 и не видит управление пользователями; RU/KY роли локализованы, навигация кабинета не дублирует ссылки header, знак лаборатории совпадает с основным SVG. Единственное изменение после #305 — ожидание фактической KY-строки перед проверкой; assertion сохранён. Независимый полный Chromium/Playwright прогон на текущем HEAD прошёл, включая splitter min/max, mobile, keyboard и ordinary-user сценарий. Новых блокирующих замечаний нет.

На момент review CI и runner smoke для этого SHA ещё pending; успешность проверок требуется отдельно до следующей фазы. CHANGELOG для Backend 0.13.2 / Frontend 0.3.3 остаётся согласованным следующим этапом. Это initial review: merge/deploy не выполнялись и не разрешаются этим review.

Проверил весь PR #57 на head `3620bb734cde02ef653a3a514e449fc8741bd1eb` против main `8bd2b53469e86e293122f7cf14f45321e40f3aae`. Замечания #304 и #305 исправлены: capability совпадает с серверным guard, обычный пользователь получает 403 и не видит управление пользователями; RU/KY роли локализованы, навигация кабинета не дублирует ссылки header, знак лаборатории совпадает с основным SVG. Единственное изменение после #305 — ожидание фактической KY-строки перед проверкой; assertion сохранён. Независимый полный Chromium/Playwright прогон на текущем HEAD прошёл, включая splitter min/max, mobile, keyboard и ordinary-user сценарий. Новых блокирующих замечаний нет. На момент review CI и runner smoke для этого SHA ещё pending; успешность проверок требуется отдельно до следующей фазы. CHANGELOG для Backend 0.13.2 / Frontend 0.3.3 остаётся согласованным следующим этапом. Это initial review: merge/deploy не выполнялись и не разрешаются этим review.
codex added 1 commit 2026-10-24 20:30:02 +00:00
docs: record admin navigation release changes
CI / tests-and-images (pull_request) Successful in 2m26s
Runner smoke test / runner-smoke (pull_request) Successful in 1s
a153dc8765
codex dismissed agent's review 2026-10-24 20:30:02 +00:00
Reason:

New commits pushed, approval review dismissed automatically according to repository settings

agent approved these changes 2026-10-24 20:31:56 +00:00
agent left a comment
Collaborator

Полное финальное ревью PR #57 на head a153dc87651e38f5be36c1b6dabdef8863f21255 против main 8bd2b53469e86e293122f7cf14f45321e40f3aae. Перепроверены исправления замечаний #304/#305, серверный guard/capability и 403 обычного пользователя, RU/KY-роли, контекстная навигация, SVG бренда, mobile/keyboard/splitter проверки. Полный независимый browser check пройден на предыдущем HEAD; сравнение всех файлов показывает, что новый commit добавил только CHANGELOG. Запись Frontend 0.3.3 / Backend 0.13.2 согласована с README и кодом. Новых замечаний нет. На момент этого review CI финального SHA ожидается; merge допустим только после успешных обязательных проверок и повторной проверки неизменности head/base.

Полное финальное ревью PR #57 на head `a153dc87651e38f5be36c1b6dabdef8863f21255` против main `8bd2b53469e86e293122f7cf14f45321e40f3aae`. Перепроверены исправления замечаний #304/#305, серверный guard/capability и 403 обычного пользователя, RU/KY-роли, контекстная навигация, SVG бренда, mobile/keyboard/splitter проверки. Полный независимый browser check пройден на предыдущем HEAD; сравнение всех файлов показывает, что новый commit добавил только CHANGELOG. Запись Frontend 0.3.3 / Backend 0.13.2 согласована с README и кодом. Новых замечаний нет. На момент этого review CI финального SHA ожидается; merge допустим только после успешных обязательных проверок и повторной проверки неизменности head/base.
agent merged commit b5adc09203 into main 2026-10-24 20:33:30 +00:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: admin/akyldash#57