BR 3.1 — User Service

Небольшая задача: расширить permission-каталог 6 новыми ключами и выдать их системной роли «Администратор» во всех существующих франшизах.

Контракты

  • API — обновлён permission-catalog response
  • Overview — убран «Клиенты (planned)»

Задачи

1. Расширить PermissionCatalog.java

  • В BACKOFFICE_SECTIONS добавить:
    • new BackofficeSection("customers", "Клиенты", true) — с read+edit
    • new BackofficeSection("customer_groups", "Группы клиентов", true) — с read+edit
  • В POS_OPERATIONS добавить:
    • new PermissionItem("customers.create_quick", "Быстрое создание клиента")
  • Добавить особый permission customers.delete отдельно от customers.edit (не вписывается в стандартный паттерн read/edit):
    • Либо: добавить поле BackofficeSection.hasDelete и обрабатывать в buildAllKeys()
    • Либо: вручную в отдельной константе EXTRA_KEYS = Set.of("customers.delete") и включить в ALL_KEYS
  • [~] Обновить unit-тесты PermissionCatalogTest — проверить что новые ключи попали в all() и в backofficeCatalog()пропущено, тестов в репе нет

2. Разовая миграция данных

  • Liquibase changeset 024-br-3-1-extend-admin-permissions.xml:
    • Найти все roles где is_system = true AND name = 'Администратор' AND deleted_at IS NULL
    • Для каждой — вставить в role_permissions недостающие ключи:
      • customers.read, customers.edit, customers.delete, customers.create_quick
      • customer_groups.read, customer_groups.edit
    • ON CONFLICT DO NOTHING чтобы идемпотентно
    • SQL примерно:
      INSERT INTO role_permissions (role_id, permission_key, granted)
      SELECT r.id, unnest(ARRAY[
        'customers.read', 'customers.edit', 'customers.delete', 'customers.create_quick',
        'customer_groups.read', 'customer_groups.edit'
      ]), true
      FROM roles r
      WHERE r.is_system = true
        AND r.name = 'Администратор'
        AND r.deleted_at IS NULL
      ON CONFLICT (role_id, permission_key) DO NOTHING;

3. Валидация permission-ключей

  • При сохранении роли (POST/PATCH /roles) проверка isValidKey() — должна пропускать новые ключи. Убедиться что тест проходит.

4. Тесты

  • PermissionCatalogTest — новые ключи в all(), в каталоге, в POS-operations
  • Integration: GET /roles/permission-catalog возвращает новые разделы / ключи
  • Integration: создание роли с новыми ключами (customers.edit + customers.read) — работает

Definition of Done

  • GET /roles/permission-catalog возвращает новые разделы «Клиенты» и «Группы клиентов», и customers.create_quick в POS
  • Миграция применяется на тестовом VPS — все «Администраторы» получают 6 новых permissions автоматически
  • Можно создать обычную роль с customers.read через API — без ошибки валидации