Browse Source

fix #389 : remove member when deleting user

Shinsuke Sugaya 9 years ago
parent
commit
376738a6a6
1 changed files with 28 additions and 1 deletions
  1. 28 1
      src/main/java/org/codelibs/fess/ldap/LdapManager.java

+ 28 - 1
src/main/java/org/codelibs/fess/ldap/LdapManager.java

@@ -328,9 +328,36 @@ public class LdapManager {
         }
 
         final Supplier<Hashtable<String, String>> 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<ModificationItem> 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<ModificationItem> 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());
             }