Browse Source

fix #2604 remove duplicated roles

Shinsuke Sugaya 3 years ago
parent
commit
fb7e40e421
1 changed files with 14 additions and 3 deletions
  1. 14 3
      src/main/java/org/codelibs/fess/ldap/LdapUser.java

+ 14 - 3
src/main/java/org/codelibs/fess/ldap/LdapUser.java

@@ -17,6 +17,7 @@ package org.codelibs.fess.ldap;
 
 
 import static org.codelibs.core.stream.StreamUtil.stream;
 import static org.codelibs.core.stream.StreamUtil.stream;
 
 
+import java.util.Arrays;
 import java.util.Hashtable;
 import java.util.Hashtable;
 
 
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.ArrayUtils;
@@ -56,10 +57,10 @@ public class LdapUser implements FessUser {
             final String groupFilter = fessConfig.getLdapGroupFilter();
             final String groupFilter = fessConfig.getLdapGroupFilter();
             if (StringUtil.isNotBlank(baseDn) && StringUtil.isNotBlank(accountFilter)) {
             if (StringUtil.isNotBlank(baseDn) && StringUtil.isNotBlank(accountFilter)) {
                 final LdapManager ldapManager = ComponentUtil.getLdapManager();
                 final LdapManager ldapManager = ComponentUtil.getLdapManager();
-                permissions = ArrayUtils.addAll(ldapManager.getRoles(this, baseDn, accountFilter, groupFilter, roles -> {
-                    permissions = roles;
+                permissions = distinct(ArrayUtils.addAll(ldapManager.getRoles(this, baseDn, accountFilter, groupFilter, roles -> {
+                    permissions = distinct(roles);
                     ComponentUtil.getActivityHelper().permissionChanged(OptionalThing.of(new FessUserBean(this)));
                     ComponentUtil.getActivityHelper().permissionChanged(OptionalThing.of(new FessUserBean(this)));
-                }), fessConfig.getRoleSearchUserPrefix() + ldapManager.normalizePermissionName(getName()));
+                }), fessConfig.getRoleSearchUserPrefix() + ldapManager.normalizePermissionName(getName())));
             } else {
             } else {
                 permissions = StringUtil.EMPTY_STRINGS;
                 permissions = StringUtil.EMPTY_STRINGS;
             }
             }
@@ -90,4 +91,14 @@ public class LdapUser implements FessUser {
         return ComponentUtil.getFessConfig().isLdapAdminEnabled(name);
         return ComponentUtil.getFessConfig().isLdapAdminEnabled(name);
     }
     }
 
 
+    private static String[] distinct(final String[] values) {
+        if (values == null) {
+            return StringUtil.EMPTY_STRINGS;
+        }
+        if (values.length < 2) {
+            return values;
+        }
+        return Arrays.stream(values).distinct().toArray(n -> new String[n]);
+    }
+
 }
 }