Добрый день!
Jmix 1.5.3
Как можно найти всех пользователей, которым назначена указанная специальная политика?
Добрый день!
Jmix 1.5.3
Как можно найти всех пользователей, которым назначена указанная специальная политика?
Специальная политика - значит у вас есть ResourceRole
с определенным кодом(roleCode
).
Если у юзера есть данная Ресурсная роль, то в таблице SEC_ROLE_ASSIGNMENT
должна быть данная роль.
Можете сделать запрос в бд
select u from User u where u.username in (select ra.username from sec_RoleAssignmentEntity ra where ra.roleCode = :roleCode and ra.roleType = 'resource')
@yarik1706 , спасибо.
Это будет работать при прямом назначении роли. А если роль будет в дочерней, то вопрос.
Олег, здравствуйте!
Можно попробовать воспользоваться методами io.jmix.security.role.ResourceRoleRepository#getAllRoles
- для получения всех ролей
и
io.jmix.security.model.ResourceRole#getAllResourcePolicies
- для получения всех политик роли, в т.ч. дочерних.
Используя эти методы можно составить список ролей, содержащих нужную политику (примерно так):
List<ResourceRole> rolesWithPolicy = resourceRoleRepository.getAllRoles().stream()
.filter(resourceRole -> {
Collection<ResourcePolicy> allRolePolicies = resourceRole.getAllResourcePolicies();
return /*check that allRolePolicies contains required specific policy*/;
})
.toList();
и загрузить пользователей с полученными ролями используя запрос, который предложил Ярослав, но только с условием in
для ra.roleCode
.
С уважением,
Дмитрий