Получение прав пользователей

Когда роли синхронизируются в соответствии с LDAP, они получаются в несколько шагов:

  • Получение ролей из групп, в которых состоит пользователь

    Итоговый список прав состоит из названий групп, в которых состоит пользователь. По умолчанию для получения названия права используется атрибут cn группы. Вы можете изменить этот атрибут в свойстве jmix.ldap.group-role-attribute.

  • Получение ролей из атрибутов пользователя

    Дополнительно роли пользователя могут быть добавлены на основе его собственных атрибутов.

    Зарегистрируйте Spring-бин, реализующий интерфейс LdapUserAdditionalRoleProvider, и реализуйте метод getAdditionalRoles() в этом бине. Например:

    @Component("demo_MyLdapUserAdditionalRoleProvider")
    public class MyLdapUserAdditionalRoleProvider implements LdapUserAdditionalRoleProvider {
    
        @Override
        public Set<GrantedAuthority> getAdditionalRoles(DirContextOperations user, String username) {
            return new HashSet<>();
        }
    }
  • Применение ролей по умолчанию

    Свойство jmix.ldap.default-roles содержит разделенный запятыми список ролей, которые будут назначены каждому пользователю, аутентифицированному через LDAP.

Итоговый список прав передается через JmixLdapGrantedAuthoritiesMapper для получения окончательной коллекции прав. Этот маппер используется для сопоставления ранее полученных прав с GrantedAuthority в Jmix.

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

Также вы можете реализовать интерфейс LdapAuthorityToJmixRoleCodesMapper для сопоставления прав LDAP и кодов ролей Jmix. Это позволяет сопоставить несколько кодов ролей с одной группой LDAP. Роли могут быть как ресурсными, так и ролями уровня строк.

В примере ниже бин реализует сопоставление групп LDAP mathematician и scientists с кодами ролей Jmix:

@Component("l_CustomAuthorityMapperBean")
public class CustomAuthorityMapperBean implements LdapAuthorityToJmixRoleCodesMapper {

    @Override
    public Collection<String> mapAuthorityToJmixRoleCodes(String authority) { (1)
        Collection<String> roleCollection = new ArrayList<>();
        if (authority.equals("mathematicians")) { (2)
            roleCollection.add("system-full-access");
        } else {
            roleCollection.add(authority + "-resource-role"); (3)
            roleCollection.add(authority + "-row-level-role");
        }
        return roleCollection;
    }
}
1 Переопределяет метод, который принимает право LDAP в качестве входного параметра и возвращает коллекцию кодов ролей, соответствующих данному праву.
2 В случае группы mathematicians пользователь LDAP получает роль system-full-access.
3 В случае группы scientists пользователь LDAP получает две роли: scientists-resource-role и scientists-row-level-role.