diff --git a/src/main/java/org/codelibs/fess/ldap/LdapManager.java b/src/main/java/org/codelibs/fess/ldap/LdapManager.java index a65196a04..c9128bea8 100644 --- a/src/main/java/org/codelibs/fess/ldap/LdapManager.java +++ b/src/main/java/org/codelibs/fess/ldap/LdapManager.java @@ -328,9 +328,36 @@ public class LdapManager { } final Supplier> adminEnv = () -> createAdminEnv(); + final String userDN = fessConfig.getLdapAdminUserSecurityPrincipal(user.getName()); + + StreamUtil.of(user.getGroupNames()).forEach(name -> { + search(fessConfig.getLdapAdminGroupBaseDn(), fessConfig.getLdapAdminGroupFilter(name), null, adminEnv, subResult -> { + if (!subResult.hasMore()) { + final Group group = new Group(); + group.setName(name); + insert(group); + } + final List modifyList = new ArrayList<>(); + modifyDeleteEntry(modifyList, "member", userDN); + modify(fessConfig.getLdapAdminGroupSecurityPrincipal(name), modifyList, adminEnv); + }); + }); + StreamUtil.of(user.getRoleNames()).forEach(name -> { + search(fessConfig.getLdapAdminRoleBaseDn(), fessConfig.getLdapAdminRoleFilter(name), null, adminEnv, subResult -> { + if (!subResult.hasMore()) { + final Role role = new Role(); + role.setName(name); + insert(role); + } + final List modifyList = new ArrayList<>(); + modifyDeleteEntry(modifyList, "member", userDN); + modify(fessConfig.getLdapAdminRoleSecurityPrincipal(name), modifyList, adminEnv); + }); + }); + search(fessConfig.getLdapAdminUserBaseDn(), fessConfig.getLdapAdminUserFilter(user.getName()), null, adminEnv, result -> { if (result.hasMore()) { - delete(fessConfig.getLdapAdminUserSecurityPrincipal(user.getName()), adminEnv); + delete(userDN, adminEnv); } else { logger.info("{} does not exist in LDAP server.", user.getName()); }