Jmix version: 1.5.3
Jmix Studio plugin version: 2.1.0-232
IntelliJ version: IntelliJ IDEA 2023.2.5 (Ultimate Edition)
Синхронизирую пользователей с Active Directory используя LDAP. При первичном логине юзерам не выдаются дефолтные роли, при выдаче их в ручную через Application-> Users все работает корректно.
Вот, это самое странное, меню и страницу запуска отчетов они видят благодаря роли report-run, но, отчеты которые должны быть видны пользователям имеющие роль report-run они не видят. К тому же, таблица с ролями пуста когда просматриваешь роли юзера через админа
ну и как пример отчет с видимостью для юзеров с ролью report-run, у юзера его, естественно, нет
Страница запуска отчетов которая открывается после логина как бы косвенно говорит о том, что у пользователя есть роль report-run, но при этом весь остальной функционал отсутствует. Ну и пустой список ролей юзера тоже сбивает с толку
То, что вы видете на экране назначения ролей для пользователя, это записи в базе из сущности RoleAssignmentEntity. Из этих записей при логине пользователя в объект Authentication для текущего пользователя помещаются доступные иму роли.
определяет список имён ролей, которые напрямую будут помещены в объект Authentication для текущего пользователя. Для ролей из этого свойства никаких записей в таблице SEC_ROLE_ASSIGNMENT_ENTITY не создаётся, поэтому в экране назначенных ролей у вас и пусто. Но внутрь объекта Authentication роли помещаются, поэтому права у пользователя есть.
Если вам нужно, чтобы назначения ролей синхронизировались, то, наверное, следует проставить jmix.ldap.synchronize-role-assignments=true
то при каждом логине сбрасываются роли до стандартных, то есть даже если я пользователю выдал full-access то при следующем входе full-access отбирается
А вы какое поведение в итоге желаете получить? Чтобы при первом логине для пользователя создавались записи в таблице SEC_ROLE_ASSIGNMENT для дефолтных ролей, а потом ничего больше не перетиралось и админ мог ещё пользователю ролей через UI добавить?
Да, именно такое поведение я бы хотел получить. И хотел бы узнать можно ли добиться такого поведения настройками LDAP чтобы не создавать свои ненужные надстройки над уже существующим кодом
Боюсь, что такого поведения настройками добиться не получится. Вам скорее всего нужно будет прописать нужное поведение самому в вашей реализации LdapUserDetailsSynchronizationStrategy. Можете использовать io.jmix.ldap.userdetails.AbstractLdapUserDetailsSynchronizationStrategy как образец.