Default-roles не выдает роли пользователям

Здравствуйте!

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 все работает корректно.

LDAP настройки:

jmix.ldap.standard-authentication-users=admin
jmix.ldap.urls=ldap://some_url:some_port/
jmix.ldap.base-dn=DC=some_dc,DC=some_dc
jmix.ldap.manager-dn=CN=JMIX,OU=some_ou,DC=some_dc,DC=some_dc
jmix.ldap.manager-password=some_password
jmix.ldap.user-search-filter=(&(objectClass=user)(sAMAccountName={1}))
jmix.ldap.active-directory-domain=some_domain
jmix.ldap.user-search-base=DC=some_dc,DC=some_dc
jmix.ldap.username-attribute=sAMAccountName
jmix.ldap.group-role-attribute=CN
jmix.ldap.default-roles=ui-minimal, ui-filter, report-run
jmix.ldap.synchronize-role-assignments=false
jmix.ldap.synchronize-user-on-login=true
jmix.ldap.enabled=true
jmix.ldap.group-search-subtree=true
jmix.ldap.use-active-directory-configuration=true
jmix.ldap.group-for-synchronization=CN=JMIX Group,CN=Users,DC=some_dc,DC=some_dc
jmix.ldap.group-search-base=dc=some_dc,dc=some_dc
jmix.ldap.member-attribute=member

Пока думаю выдавать дефолтные роли программно, но все равно мое решение выглядит костыльным на фоне уже существующего функционала.

Добрый день!

Вы имеете в виду, что пользователи при первом логине через LDAP не видят ни меню, ни всего остального из-за отсутствия дефолтной ui-minimal?

Вот, это самое странное, меню и страницу запуска отчетов они видят благодаря роли report-run, но, отчеты которые должны быть видны пользователям имеющие роль report-run они не видят. К тому же, таблица с ролями пуста когда просматриваешь роли юзера через админа

Страница после логина выглядит следующим образом:
berik page

Список ролей у юзера:
beriks roles

ну и как пример отчет с видимостью для юзеров с ролью report-run, у юзера его, естественно, нет
report

Страница запуска отчетов которая открывается после логина как бы косвенно говорит о том, что у пользователя есть роль report-run, но при этом весь остальной функционал отсутствует. Ну и пустой список ролей юзера тоже сбивает с толку

То, что вы видете на экране назначения ролей для пользователя, это записи в базе из сущности RoleAssignmentEntity. Из этих записей при логине пользователя в объект Authentication для текущего пользователя помещаются доступные иму роли.

Следующее свойство

jmix.ldap.default-roles=ui-minimal, ui-filter, report-run

определяет список имён ролей, которые напрямую будут помещены в объект Authentication для текущего пользователя. Для ролей из этого свойства никаких записей в таблице SEC_ROLE_ASSIGNMENT_ENTITY не создаётся, поэтому в экране назначенных ролей у вас и пусто. Но внутрь объекта Authentication роли помещаются, поэтому права у пользователя есть.

Если вам нужно, чтобы назначения ролей синхронизировались, то, наверное, следует проставить jmix.ldap.synchronize-role-assignments=true

Но если я проставляю

jmix.ldap.synchronize-role-assignments=true

то при каждом логине сбрасываются роли до стандартных, то есть даже если я пользователю выдал full-access то при следующем входе full-access отбирается

А вы какое поведение в итоге желаете получить? Чтобы при первом логине для пользователя создавались записи в таблице SEC_ROLE_ASSIGNMENT для дефолтных ролей, а потом ничего больше не перетиралось и админ мог ещё пользователю ролей через UI добавить?

Да, именно такое поведение я бы хотел получить. И хотел бы узнать можно ли добиться такого поведения настройками LDAP чтобы не создавать свои ненужные надстройки над уже существующим кодом

Боюсь, что такого поведения настройками добиться не получится. Вам скорее всего нужно будет прописать нужное поведение самому в вашей реализации LdapUserDetailsSynchronizationStrategy. Можете использовать io.jmix.ldap.userdetails.AbstractLdapUserDetailsSynchronizationStrategy как образец.

1 симпатия

Понял вас, спасибо вам большое за помощь!