Skip to content

Добавить матрицу прав и управление доступом по permissions - #58

Merged
PANiXiDA merged 24 commits into
developmentfrom
feature/identity-roles-claims
Oct 22, 2026
Merged

PANiXiDA merged 24 commits into
developmentfrom
feature/identity-roles-claims

Conversation

@PANiXiDA

@PANiXiDA PANiXiDA commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Что изменено и зачем

  • Роли пользователя назначаются в формах создания и редактирования. Permissions пользователя и роли редактируются матрицей: модули → сущности × действия, с выбором строки, столбца или всего модуля.
  • Общий AsyncSelectOption поддерживает MultiSelection и привязку Values/ValuesChanged: одиночный выбор использует MudAutocomplete, множественный — прежний MudSelect с галочками и названиями в строке. RoleSelect использует эту основу, каталог загружается один раз на экземпляр компонента.
  • Исправлена передача строкового Value в обычных и асинхронных списках перечислений и в текстовом фильтре: отображается выбранная подпись или текст, вместо буквальной строки Value.
  • Выбор ролей загружается одним GET /api/v1/roles/select-options, без обхода страниц общего списка. Контракт и API: Добавить отдельный endpoint вариантов ролей api#80.
  • Коллекции преобразуются через Mapperly с прежними точечными SuppressNullMismatchDiagnostic. Подход к обработке null вынесен в Определить подход к проверке null в обязательных коллекциях Mapperly #60.
  • Блок назначений вне каталога удалён. Для управления клеймами осталась только матрица permissions.
  • Меню и действия учитывают permissions. Ссылка на существующую запись и открытие страницы требуют read; кнопка сохранения требует update, как в API. Это применяется к фракциям, героям, юнитам, пользователям и ролям. Кнопки создания и сохранения остаются внутри EditFormActions: необязательный Permission включает проверку через PermissionView внутри компонента. Кнопка отмены остаётся доступной.
  • Редакторы назначений ролей и permissions на страницах Identity загружаются при наличии соответствующего update: при просмотре не запрашиваются каталоги для изменения доступа.
  • Прямые права пользователя дополняют права ролей. isDefault управляет назначением роли при регистрации.
  • Обновлены зависимости, OpenAPI, локальное подключение к БД и перенаправления входа для localhost с dev API. Замечания Sonar исправлены.

Как проверить локально

dotnet build TacticalHeroes.Admin.slnx -c Release --no-restore
dotnet test --solution TacticalHeroes.Admin.slnx -c Release --no-build --no-restore --max-parallel-test-modules 1

Release-сборка без предупреждений и ошибок, все 755 тестов решения и проверка форматирования прошли. Для интеграционных тестов должен быть запущен Docker.

В формах создания и изменения пользователя раскрыть список ролей, выбрать несколько галочками, снять выбор и проверить сохранение. У пользователя проверить подпись текущего статуса и переключение статуса. Одиночный выбор фракции должен работать как раньше. Проверены компоненты в Chrome через Playwright на временном стенде с тестовыми данными: 1280×900 и 390×844, без ошибок консоли и горизонтального скролла.

С одним read проверить переход из списка на существующую запись и отсутствие кнопки сохранения. Добавить update и проверить сохранение. Эти сценарии покрыты компонентными тестами всех пяти страниц, списка фракций и общих действий формы. Проверить изменение permissions через матрицу и меню пользователя с ограниченными правами.

Совместимость

  • Перед админкой выпустить API Добавить отдельный endpoint вариантов ролей api#80 с новым endpoint вариантов ролей.
  • Обновление permissions из Проверять permissions в UseCase и удалить клеймы секций api#74 требует применить RemoveNonPermissionClaims: миграция удаляет у пользователей и ролей все клеймы, кроме permission. Затем обновить frontend и войти заново.
  • Breaking changes: назначаются только permissions из каталога; метаданные секций заменены группировкой по модулям.
  • Существующие контракты API и требования permissions сохранены: GET требует read, обновление — update.
  • Миграций frontend нет. В PR есть локальные настройки PostgreSQL и исправление перенаправлений; список допустимых OAuth callback не меняется.
  • Для обновлённого shared runtime контейнера нужен свежий базовый образ (docker build --pull).

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-22T05:59:07.089460Z 5364b80 Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@PANiXiDA PANiXiDA changed the title Добавить роли пользователей и выбор клеймов из каталогов Добавить матрицу прав и управление доступом по permissions Oct 20, 2026
@PANiXiDA

Copy link
Copy Markdown
Contributor Author

@codex

@panixida-sonarqube

Copy link
Copy Markdown

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Hooray!

Reviewed commit: 5364b80776

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@PANiXiDA
PANiXiDA merged commit c03a400 into development Oct 22, 2026
19 checks passed
@PANiXiDA
PANiXiDA deleted the feature/identity-roles-claims branch October 22, 2026 06:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants