瀏覽代碼

#502 : replace targetRole with permissions and minor fixes

Shinsuke Sugaya 9 年之前
父節點
當前提交
a37c29ca3e
共有 29 個文件被更改,包括 304 次插入60 次删除
  1. 11 0
      src/main/config/es/fess_config.json
  2. 5 0
      src/main/java/org/codelibs/fess/app/service/BadWordService.java
  3. 8 9
      src/main/java/org/codelibs/fess/app/service/ElevateWordService.java
  4. 0 1
      src/main/java/org/codelibs/fess/app/web/admin/badword/AdminBadwordAction.java
  5. 8 6
      src/main/java/org/codelibs/fess/app/web/admin/elevateword/AdminElevatewordAction.java
  6. 2 2
      src/main/java/org/codelibs/fess/app/web/admin/elevateword/CreateForm.java
  7. 29 0
      src/main/java/org/codelibs/fess/app/web/admin/upgrade/AdminUpgradeAction.java
  8. 1 0
      src/main/java/org/codelibs/fess/es/config/bsbhv/BsElevateWordBhv.java
  9. 17 0
      src/main/java/org/codelibs/fess/es/config/bsentity/BsElevateWord.java
  10. 9 0
      src/main/java/org/codelibs/fess/es/config/bsentity/dbmeta/ElevateWordDbm.java
  11. 4 0
      src/main/java/org/codelibs/fess/es/config/cbean/bs/BsElevateWordCB.java
  12. 166 0
      src/main/java/org/codelibs/fess/es/config/cbean/cq/bs/BsElevateWordCQ.java
  13. 5 5
      src/main/java/org/codelibs/fess/helper/SuggestHelper.java
  14. 11 8
      src/main/java/org/codelibs/fess/mylasta/action/FessLabels.java
  15. 4 0
      src/main/resources/fess_indices/.fess_config/elevate_word.json
  16. 3 4
      src/main/resources/fess_label.properties
  17. 3 4
      src/main/resources/fess_label_en.properties
  18. 3 4
      src/main/resources/fess_label_ja.properties
  19. 0 2
      src/main/resources/fess_label_ko.properties
  20. 1 1
      src/main/webapp/WEB-INF/view/admin/dataconfig/admin_dataconfig_details.jsp
  21. 1 1
      src/main/webapp/WEB-INF/view/admin/dataconfig/admin_dataconfig_edit.jsp
  22. 3 3
      src/main/webapp/WEB-INF/view/admin/elevateword/admin_elevateword_details.jsp
  23. 4 4
      src/main/webapp/WEB-INF/view/admin/elevateword/admin_elevateword_edit.jsp
  24. 1 1
      src/main/webapp/WEB-INF/view/admin/fileconfig/admin_fileconfig_details.jsp
  25. 1 1
      src/main/webapp/WEB-INF/view/admin/fileconfig/admin_fileconfig_edit.jsp
  26. 1 1
      src/main/webapp/WEB-INF/view/admin/labeltype/admin_labeltype_details.jsp
  27. 1 1
      src/main/webapp/WEB-INF/view/admin/labeltype/admin_labeltype_edit.jsp
  28. 1 1
      src/main/webapp/WEB-INF/view/admin/webconfig/admin_webconfig_details.jsp
  29. 1 1
      src/main/webapp/WEB-INF/view/admin/webconfig/admin_webconfig_edit.jsp

+ 11 - 0
src/main/config/es/fess_config.json

@@ -681,6 +681,10 @@
             "type" : "string",
             "index" : "not_analyzed"
           },
+          "permissions" : {
+            "type" : "string",
+            "index" : "not_analyzed"
+          },
           "updatedBy" : {
             "type" : "string",
             "index" : "not_analyzed"
@@ -944,6 +948,13 @@
                 "array" : "true"
               }
             }
+          },
+          "elevate_word" : {
+            "properties" : {
+              "permissions" : {
+                "array" : "true"
+              }
+            }
           }
         },
         "number_of_shards" : "2",

+ 5 - 0
src/main/java/org/codelibs/fess/app/service/BadWordService.java

@@ -28,6 +28,7 @@ import org.codelibs.core.beans.util.BeanUtil;
 import org.codelibs.core.lang.StringUtil;
 import org.codelibs.fess.Constants;
 import org.codelibs.fess.app.pager.BadWordPager;
+import org.codelibs.fess.es.client.FessEsClient;
 import org.codelibs.fess.es.config.cbean.BadWordCB;
 import org.codelibs.fess.es.config.exbhv.BadWordBhv;
 import org.codelibs.fess.es.config.exentity.BadWord;
@@ -53,6 +54,9 @@ public class BadWordService implements Serializable {
     @Resource
     protected BadWordBhv badWordBhv;
 
+    @Resource
+    protected FessEsClient fessEsClient;
+
     public List<BadWord> getBadWordList(final BadWordPager badWordPager) {
 
         final PagingResultBean<BadWord> badWordList = badWordBhv.selectPage(cb -> {
@@ -134,6 +138,7 @@ public class BadWordService implements Serializable {
                     logger.warn("Failed to read a sugget elevate word: " + list, e);
                 }
             }
+            fessEsClient.refresh("_all"); // TODO replace _all
         } catch (final IOException e) {
             logger.warn("Failed to read a sugget elevate word.", e);
         }

+ 8 - 9
src/main/java/org/codelibs/fess/app/service/ElevateWordService.java

@@ -28,6 +28,7 @@ import org.codelibs.core.beans.util.BeanUtil;
 import org.codelibs.core.lang.StringUtil;
 import org.codelibs.fess.Constants;
 import org.codelibs.fess.app.pager.ElevateWordPager;
+import org.codelibs.fess.es.client.FessEsClient;
 import org.codelibs.fess.es.config.cbean.ElevateWordCB;
 import org.codelibs.fess.es.config.exbhv.ElevateWordBhv;
 import org.codelibs.fess.es.config.exbhv.ElevateWordToLabelBhv;
@@ -60,6 +61,9 @@ public class ElevateWordService implements Serializable {
     @Resource
     protected FessConfig fessConfig;
 
+    @Resource
+    protected FessEsClient fessEsClient;
+
     public List<ElevateWord> getElevateWordList(final ElevateWordPager elevateWordPager) {
 
         final PagingResultBean<ElevateWord> elevateWordList = elevateWordBhv.selectPage(cb -> {
@@ -210,26 +214,21 @@ public class ElevateWordService implements Serializable {
                         elevateWord.setBoost(StringUtil.isBlank(boost) ? 1.0f : Float.parseFloat(boost));
                         elevateWord.setCreatedBy("system");
                         elevateWord.setCreatedTime(now);
-                        elevateWordBhv.insert(elevateWord, op -> {
-                            op.setRefresh(true);
-                        });
+                        elevateWordBhv.insert(elevateWord);
                     } else if (StringUtil.isBlank(reading) && StringUtil.isBlank(boost)) {
-                        elevateWordBhv.delete(elevateWord, op -> {
-                            op.setRefresh(true);
-                        });
+                        elevateWordBhv.delete(elevateWord);
                     } else {
                         elevateWord.setReading(reading);
                         elevateWord.setBoost(StringUtil.isBlank(boost) ? 1.0f : Float.parseFloat(boost));
                         elevateWord.setUpdatedBy("system");
                         elevateWord.setUpdatedTime(now);
-                        elevateWordBhv.update(elevateWord, op -> {
-                            op.setRefresh(true);
-                        });
+                        elevateWordBhv.update(elevateWord);
                     }
                 } catch (final Exception e) {
                     logger.warn("Failed to read a sugget elevate word: " + list, e);
                 }
             }
+            fessEsClient.refresh("_all"); // TODO replace _all
         } catch (final IOException e) {
             logger.warn("Failed to read a sugget elevate word.", e);
         }

+ 0 - 1
src/main/java/org/codelibs/fess/app/web/admin/badword/AdminBadwordAction.java

@@ -285,7 +285,6 @@ public class AdminBadwordAction extends FessAdminAction {
         new Thread(() -> {
             try (Reader reader = new BufferedReader(new InputStreamReader(form.badWordFile.getInputStream(), getCsvEncoding()))) {
                 badWordService.importCsv(reader);
-                suggestHelper.deleteAllBadWords();
                 suggestHelper.storeAllBadWords();
             } catch (final Exception e) {
                 throw new FessSystemException("Failed to import data.", e);

+ 8 - 6
src/main/java/org/codelibs/fess/app/web/admin/elevateword/AdminElevatewordAction.java

@@ -153,8 +153,8 @@ public class AdminElevatewordAction extends FessAdminAction {
                                 copyOp.exclude("permissions");
                             });
                             final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
-                            form.targetRole =
-                                    stream(entity.getTargetRole()).get(
+                            form.permissions =
+                                    stream(entity.getPermissions()).get(
                                             stream -> stream.map(s -> permissionHelper.decode(s)).filter(StringUtil::isNotBlank).distinct()
                                                     .collect(Collectors.joining("\n")));
                         }).orElse(() -> {
@@ -191,8 +191,8 @@ public class AdminElevatewordAction extends FessAdminAction {
                                                 copyOp.exclude("permissions");
                                             });
                                             final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
-                                            form.targetRole =
-                                                    stream(entity.getTargetRole()).get(
+                                            form.permissions =
+                                                    stream(entity.getPermissions()).get(
                                                             stream -> stream.map(s -> permissionHelper.decode(s))
                                                                     .filter(StringUtil::isNotBlank).distinct()
                                                                     .collect(Collectors.joining("\n")));
@@ -260,7 +260,7 @@ public class AdminElevatewordAction extends FessAdminAction {
                     try {
                         elevateWordService.store(entity);
                         suggestHelper.addElevateWord(entity.getSuggestWord(), entity.getReading(), entity.getLabelTypeValues(),
-                                entity.getTargetRole(), entity.getBoost());
+                                entity.getPermissions(), entity.getBoost());
                         saveInfo(messages -> messages.addSuccessCrudCreateCrudTable(GLOBAL));
                     } catch (final Exception e) {
                         throwValidationError(messages -> messages.addErrorsCrudFailedToCreateCrudTable(GLOBAL, buildThrowableMessage(e)),
@@ -372,7 +372,9 @@ public class AdminElevatewordAction extends FessAdminAction {
                             op -> op.exclude(Stream.concat(Stream.of(Constants.COMMON_CONVERSION_RULE), Stream.of("permissions")).toArray(
                                     n -> new String[n])));
                     final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
-                    entity.setTargetRole(permissionHelper.encode(form.targetRole));
+                    entity.setPermissions(stream(form.permissions.split("\n")).get(
+                            stream -> stream.map(s -> permissionHelper.encode(s)).filter(StringUtil::isNotBlank).distinct()
+                                    .toArray(n -> new String[n])));
                     return entity;
                 });
     }

+ 2 - 2
src/main/java/org/codelibs/fess/app/web/admin/elevateword/CreateForm.java

@@ -44,7 +44,7 @@ public class CreateForm implements Serializable {
     public String targetLabel;
 
     @Size(max = 4000)
-    public String targetRole;
+    public String permissions;
 
     @Required
     @ValidateTypeFailure
@@ -62,6 +62,6 @@ public class CreateForm implements Serializable {
         boost = 100.0f;
         createdBy = ComponentUtil.getSystemHelper().getUsername();
         createdTime = ComponentUtil.getSystemHelper().getCurrentTimeAsLong();
-        targetRole = ComponentUtil.getFessConfig().getSearchDefaultDisplayPermission();
+        permissions = ComponentUtil.getFessConfig().getSearchDefaultDisplayPermission();
     }
 }

+ 29 - 0
src/main/java/org/codelibs/fess/app/web/admin/upgrade/AdminUpgradeAction.java

@@ -20,18 +20,22 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
 import org.codelibs.core.exception.ResourceNotFoundRuntimeException;
 import org.codelibs.core.io.FileUtil;
 import org.codelibs.core.io.ResourceUtil;
+import org.codelibs.core.lang.StringUtil;
+import org.codelibs.core.stream.StreamUtil;
 import org.codelibs.elasticsearch.runner.net.Curl;
 import org.codelibs.elasticsearch.runner.net.CurlResponse;
 import org.codelibs.fess.app.web.base.FessAdminAction;
 import org.codelibs.fess.es.client.FessEsClient;
 import org.codelibs.fess.es.config.exbhv.DataConfigBhv;
 import org.codelibs.fess.es.config.exbhv.DataConfigToRoleBhv;
+import org.codelibs.fess.es.config.exbhv.ElevateWordBhv;
 import org.codelibs.fess.es.config.exbhv.FileConfigBhv;
 import org.codelibs.fess.es.config.exbhv.FileConfigToRoleBhv;
 import org.codelibs.fess.es.config.exbhv.LabelToRoleBhv;
@@ -39,6 +43,7 @@ import org.codelibs.fess.es.config.exbhv.LabelTypeBhv;
 import org.codelibs.fess.es.config.exbhv.RoleTypeBhv;
 import org.codelibs.fess.es.config.exbhv.WebConfigBhv;
 import org.codelibs.fess.es.config.exbhv.WebConfigToRoleBhv;
+import org.codelibs.fess.es.config.exentity.ElevateWord;
 import org.codelibs.fess.es.user.exbhv.RoleBhv;
 import org.codelibs.fess.es.user.exentity.Role;
 import org.codelibs.fess.mylasta.direction.FessConfig;
@@ -95,6 +100,9 @@ public class AdminUpgradeAction extends FessAdminAction {
     @Resource
     protected DataConfigBhv dataConfigBhv;
 
+    @Resource
+    protected ElevateWordBhv elevateWordBhv;
+
     @Resource
     protected FessEsClient fessEsClient;
 
@@ -345,7 +353,28 @@ public class AdminUpgradeAction extends FessAdminAction {
                 return entity;
             });
 
+            final List<ElevateWord> elevateWordList =
+                    elevateWordBhv
+                            .selectList(cb -> cb.query().addOrderBy_CreatedBy_Asc())
+                            .stream()
+                            .filter(e -> StringUtil.isNotBlank(e.getTargetRole()))
+                            .map(e -> {
+                                final String[] permissions =
+                                        StreamUtil
+                                                .stream(e.getTargetRole().split(","))
+                                                .get(stream -> stream.filter(StringUtil::isNotBlank).map(
+                                                        s -> fessConfig.getRoleSearchRolePrefix() + s)).toArray(n -> new String[n]);
+                                e.setPermissions(permissions);
+                                e.setTargetRole(null);
+                                return e;
+                            }).collect(Collectors.toList());
+            if (!elevateWordList.isEmpty()) {
+                elevateWordBhv.batchUpdate(elevateWordList);
+            }
+
             saveInfo(messages -> messages.addSuccessUpgradeFrom(GLOBAL));
+
+            fessEsClient.refresh("_all");
         } catch (final Exception e) {
             logger.warn("Failed to upgrade data.", e);
             saveError(messages -> messages.addErrorsFailedToUpgradeFrom(GLOBAL, "10.0", e.getLocalizedMessage()));

+ 1 - 0
src/main/java/org/codelibs/fess/es/config/bsbhv/BsElevateWordBhv.java

@@ -81,6 +81,7 @@ public abstract class BsElevateWordBhv extends EsAbstractBehavior<ElevateWord, E
             result.setSuggestWord(DfTypeUtil.toString(source.get("suggestWord")));
             result.setTargetLabel(DfTypeUtil.toString(source.get("targetLabel")));
             result.setTargetRole(DfTypeUtil.toString(source.get("targetRole")));
+            result.setPermissions(toStringArray(source.get("permissions")));
             result.setUpdatedBy(DfTypeUtil.toString(source.get("updatedBy")));
             result.setUpdatedTime(DfTypeUtil.toLong(source.get("updatedTime")));
             return result;

+ 17 - 0
src/main/java/org/codelibs/fess/es/config/bsentity/BsElevateWord.java

@@ -58,6 +58,9 @@ public class BsElevateWord extends EsAbstractEntity {
     /** targetRole */
     protected String targetRole;
 
+    /** permissions */
+    protected String[] permissions;
+
     /** updatedBy */
     protected String updatedBy;
 
@@ -106,6 +109,9 @@ public class BsElevateWord extends EsAbstractEntity {
         if (targetRole != null) {
             sourceMap.put("targetRole", targetRole);
         }
+        if (permissions != null) {
+            sourceMap.put("permissions", permissions);
+        }
         if (updatedBy != null) {
             sourceMap.put("updatedBy", updatedBy);
         }
@@ -128,6 +134,7 @@ public class BsElevateWord extends EsAbstractEntity {
         sb.append(dm).append(suggestWord);
         sb.append(dm).append(targetLabel);
         sb.append(dm).append(targetRole);
+        sb.append(dm).append(permissions);
         sb.append(dm).append(updatedBy);
         sb.append(dm).append(updatedTime);
         if (sb.length() > dm.length()) {
@@ -210,6 +217,16 @@ public class BsElevateWord extends EsAbstractEntity {
         this.targetRole = value;
     }
 
+    public String[] getPermissions() {
+        checkSpecifiedProperty("permissions");
+        return permissions;
+    }
+
+    public void setPermissions(String[] value) {
+        registerModifiedProperty("permissions");
+        this.permissions = value;
+    }
+
     public String getUpdatedBy() {
         checkSpecifiedProperty("updatedBy");
         return convertEmptyToNull(updatedBy);

+ 9 - 0
src/main/java/org/codelibs/fess/es/config/bsentity/dbmeta/ElevateWordDbm.java

@@ -92,6 +92,8 @@ public class ElevateWordDbm extends AbstractDBMeta {
                 (et, vl) -> ((ElevateWord) et).setTargetLabel(DfTypeUtil.toString(vl)), "targetLabel");
         setupEpg(_epgMap, et -> ((ElevateWord) et).getTargetRole(), (et, vl) -> ((ElevateWord) et).setTargetRole(DfTypeUtil.toString(vl)),
                 "targetRole");
+        setupEpg(_epgMap, et -> ((ElevateWord) et).getPermissions(), (et, vl) -> ((ElevateWord) et).setPermissions((String[]) vl),
+                "permissions");
         setupEpg(_epgMap, et -> ((ElevateWord) et).getUpdatedBy(), (et, vl) -> ((ElevateWord) et).setUpdatedBy(DfTypeUtil.toString(vl)),
                 "updatedBy");
         setupEpg(_epgMap, et -> ((ElevateWord) et).getUpdatedTime(), (et, vl) -> ((ElevateWord) et).setUpdatedTime(DfTypeUtil.toLong(vl)),
@@ -146,6 +148,8 @@ public class ElevateWordDbm extends AbstractDBMeta {
             false, false, "String", 0, 0, null, false, null, null, null, null, null, false);
     protected final ColumnInfo _columnTargetRole = cci("targetRole", "targetRole", null, null, String.class, "targetRole", null, false,
             false, false, "String", 0, 0, null, false, null, null, null, null, null, false);
+    protected final ColumnInfo _columnPermissions = cci("permissions", "permissions", null, null, String[].class, "permissions", null,
+            false, false, false, "String", 0, 0, null, false, null, null, null, null, null, false);
     protected final ColumnInfo _columnUpdatedBy = cci("updatedBy", "updatedBy", null, null, String.class, "updatedBy", null, false, false,
             false, "String", 0, 0, null, false, null, null, null, null, null, false);
     protected final ColumnInfo _columnUpdatedTime = cci("updatedTime", "updatedTime", null, null, Long.class, "updatedTime", null, false,
@@ -179,6 +183,10 @@ public class ElevateWordDbm extends AbstractDBMeta {
         return _columnTargetRole;
     }
 
+    public ColumnInfo columnPermissions() {
+        return _columnPermissions;
+    }
+
     public ColumnInfo columnUpdatedBy() {
         return _columnUpdatedBy;
     }
@@ -196,6 +204,7 @@ public class ElevateWordDbm extends AbstractDBMeta {
         ls.add(columnSuggestWord());
         ls.add(columnTargetLabel());
         ls.add(columnTargetRole());
+        ls.add(columnPermissions());
         ls.add(columnUpdatedBy());
         ls.add(columnUpdatedTime());
         return ls;

+ 4 - 0
src/main/java/org/codelibs/fess/es/config/cbean/bs/BsElevateWordCB.java

@@ -186,6 +186,10 @@ public class BsElevateWordCB extends EsAbstractConditionBean {
             doColumn("targetRole");
         }
 
+        public void columnPermissions() {
+            doColumn("permissions");
+        }
+
         public void columnUpdatedBy() {
             doColumn("updatedBy");
         }

+ 166 - 0
src/main/java/org/codelibs/fess/es/config/cbean/cq/bs/BsElevateWordCQ.java

@@ -1315,6 +1315,172 @@ public abstract class BsElevateWordCQ extends EsAbstractConditionQuery {
         return this;
     }
 
+    public void setPermissions_Equal(String permissions) {
+        setPermissions_Term(permissions, null);
+    }
+
+    public void setPermissions_Equal(String permissions, ConditionOptionCall<TermQueryBuilder> opLambda) {
+        setPermissions_Term(permissions, opLambda);
+    }
+
+    public void setPermissions_Term(String permissions) {
+        setPermissions_Term(permissions, null);
+    }
+
+    public void setPermissions_Term(String permissions, ConditionOptionCall<TermQueryBuilder> opLambda) {
+        TermQueryBuilder builder = regTermQ("permissions", permissions);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setPermissions_NotEqual(String permissions) {
+        setPermissions_NotTerm(permissions, null);
+    }
+
+    public void setPermissions_NotEqual(String permissions, ConditionOptionCall<NotQueryBuilder> opLambda) {
+        setPermissions_NotTerm(permissions, opLambda);
+    }
+
+    public void setPermissions_NotTerm(String permissions) {
+        setPermissions_NotTerm(permissions, null);
+    }
+
+    public void setPermissions_NotTerm(String permissions, ConditionOptionCall<NotQueryBuilder> opLambda) {
+        NotQueryBuilder builder = QueryBuilders.notQuery(regTermQ("permissions", permissions));
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setPermissions_Terms(Collection<String> permissionsList) {
+        setPermissions_Terms(permissionsList, null);
+    }
+
+    public void setPermissions_Terms(Collection<String> permissionsList, ConditionOptionCall<TermsQueryBuilder> opLambda) {
+        TermsQueryBuilder builder = regTermsQ("permissions", permissionsList);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setPermissions_InScope(Collection<String> permissionsList) {
+        setPermissions_Terms(permissionsList, null);
+    }
+
+    public void setPermissions_InScope(Collection<String> permissionsList, ConditionOptionCall<TermsQueryBuilder> opLambda) {
+        setPermissions_Terms(permissionsList, opLambda);
+    }
+
+    public void setPermissions_Match(String permissions) {
+        setPermissions_Match(permissions, null);
+    }
+
+    public void setPermissions_Match(String permissions, ConditionOptionCall<MatchQueryBuilder> opLambda) {
+        MatchQueryBuilder builder = regMatchQ("permissions", permissions);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setPermissions_MatchPhrase(String permissions) {
+        setPermissions_MatchPhrase(permissions, null);
+    }
+
+    public void setPermissions_MatchPhrase(String permissions, ConditionOptionCall<MatchQueryBuilder> opLambda) {
+        MatchQueryBuilder builder = regMatchPhraseQ("permissions", permissions);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setPermissions_MatchPhrasePrefix(String permissions) {
+        setPermissions_MatchPhrasePrefix(permissions, null);
+    }
+
+    public void setPermissions_MatchPhrasePrefix(String permissions, ConditionOptionCall<MatchQueryBuilder> opLambda) {
+        MatchQueryBuilder builder = regMatchPhrasePrefixQ("permissions", permissions);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setPermissions_Fuzzy(String permissions) {
+        setPermissions_Fuzzy(permissions, null);
+    }
+
+    public void setPermissions_Fuzzy(String permissions, ConditionOptionCall<FuzzyQueryBuilder> opLambda) {
+        FuzzyQueryBuilder builder = regFuzzyQ("permissions", permissions);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setPermissions_Prefix(String permissions) {
+        setPermissions_Prefix(permissions, null);
+    }
+
+    public void setPermissions_Prefix(String permissions, ConditionOptionCall<PrefixQueryBuilder> opLambda) {
+        PrefixQueryBuilder builder = regPrefixQ("permissions", permissions);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setPermissions_GreaterThan(String permissions) {
+        setPermissions_GreaterThan(permissions, null);
+    }
+
+    public void setPermissions_GreaterThan(String permissions, ConditionOptionCall<RangeQueryBuilder> opLambda) {
+        RangeQueryBuilder builder = regRangeQ("permissions", ConditionKey.CK_GREATER_THAN, permissions);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setPermissions_LessThan(String permissions) {
+        setPermissions_LessThan(permissions, null);
+    }
+
+    public void setPermissions_LessThan(String permissions, ConditionOptionCall<RangeQueryBuilder> opLambda) {
+        RangeQueryBuilder builder = regRangeQ("permissions", ConditionKey.CK_LESS_THAN, permissions);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setPermissions_GreaterEqual(String permissions) {
+        setPermissions_GreaterEqual(permissions, null);
+    }
+
+    public void setPermissions_GreaterEqual(String permissions, ConditionOptionCall<RangeQueryBuilder> opLambda) {
+        RangeQueryBuilder builder = regRangeQ("permissions", ConditionKey.CK_GREATER_EQUAL, permissions);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setPermissions_LessEqual(String permissions) {
+        setPermissions_LessEqual(permissions, null);
+    }
+
+    public void setPermissions_LessEqual(String permissions, ConditionOptionCall<RangeQueryBuilder> opLambda) {
+        RangeQueryBuilder builder = regRangeQ("permissions", ConditionKey.CK_LESS_EQUAL, permissions);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public BsElevateWordCQ addOrderBy_Permissions_Asc() {
+        regOBA("permissions");
+        return this;
+    }
+
+    public BsElevateWordCQ addOrderBy_Permissions_Desc() {
+        regOBD("permissions");
+        return this;
+    }
+
     public void setUpdatedBy_Equal(String updatedBy) {
         setUpdatedBy_Term(updatedBy, null);
     }

+ 5 - 5
src/main/java/org/codelibs/fess/helper/SuggestHelper.java

@@ -195,7 +195,7 @@ public class SuggestHelper {
 
         for (final ElevateWord elevateWord : list) {
             addElevateWord(elevateWord.getSuggestWord(), elevateWord.getReading(), elevateWord.getLabelTypeValues(),
-                    elevateWord.getTargetRole(), elevateWord.getBoost(), false);
+                    elevateWord.getPermissions(), elevateWord.getBoost(), false);
         }
         suggester.refresh();
     }
@@ -217,19 +217,19 @@ public class SuggestHelper {
         suggester.refresh();
     }
 
-    public void addElevateWord(final String word, final String reading, final String[] tags, final String permissions, final Float boost) {
+    public void addElevateWord(final String word, final String reading, final String[] tags, final String[] permissions, final Float boost) {
         addElevateWord(word, reading, tags, permissions, boost, true);
     }
 
-    public void addElevateWord(final String word, final String reading, final String[] tags, final String roles, final float boost,
+    public void addElevateWord(final String word, final String reading, final String[] tags, final String[] permissions, final float boost,
             final boolean commit) {
         final List<String> labelList = new ArrayList<>();
         for (final String label : tags) {
             labelList.add(label);
         }
         final List<String> roleList = new ArrayList<>();
-        if (StringUtil.isNotBlank(roles)) {
-            roleList.add(roles);
+        for (final String permission : permissions) {
+            roleList.add(permission);
         }
 
         suggester.indexer().addElevateWord(

+ 11 - 8
src/main/java/org/codelibs/fess/mylasta/action/FessLabels.java

@@ -263,6 +263,9 @@ public class FessLabels extends ActionMessages {
     /** The key of the message: Login Required */
     public static final String LABELS_LOGIN_REQUIRED = "{labels.loginRequired}";
 
+    /** The key of the message: Login Link */
+    public static final String LABELS_LOGIN_LINK = "{labels.loginLink}";
+
     /** The key of the message: Thread Name */
     public static final String LABELS_THREAD_NAME = "{labels.threadName}";
 
@@ -416,12 +419,9 @@ public class FessLabels extends ActionMessages {
     /** The key of the message: Suggest Word */
     public static final String LABELS_SUGGEST_WORD = "{labels.suggestWord}";
 
-    /** The key of the message: Target Label */
+    /** The key of the message: Label */
     public static final String LABELS_TARGET_LABEL = "{labels.targetLabel}";
 
-    /** The key of the message: Target Role */
-    public static final String LABELS_TARGET_ROLE = "{labels.targetRole}";
-
     /** The key of the message: Term */
     public static final String LABELS_TERM = "{labels.term}";
 
@@ -896,8 +896,8 @@ public class FessLabels extends ActionMessages {
     /** The key of the message: ms */
     public static final String LABELS_MILLISEC = "{labels.millisec}";
 
-    /** The key of the message: Permission */
-    public static final String LABELS_permission_type = "{labels.permission_type}";
+    /** The key of the message: Permissions */
+    public static final String LABELS_PERMISSIONS = "{labels.permissions}";
 
     /** The key of the message: Label */
     public static final String LABELS_label_type = "{labels.label_type}";
@@ -989,6 +989,9 @@ public class FessLabels extends ActionMessages {
     /** The key of the message: Login Required */
     public static final String LABELS_login_required = "{labels.login_required}";
 
+    /** The key of the message: Login Link */
+    public static final String LABELS_login_link = "{labels.login_link}";
+
     /** The key of the message: Excluded Failure Type */
     public static final String LABELS_ignore_failure_type = "{labels.ignore_failure_type}";
 
@@ -1908,8 +1911,8 @@ public class FessLabels extends ActionMessages {
     /** The key of the message: Reading */
     public static final String LABELS_elevate_word_reading = "{labels.elevate_word_reading}";
 
-    /** The key of the message: Role */
-    public static final String LABELS_elevate_word_target_role = "{labels.elevate_word_target_role}";
+    /** The key of the message: Permissions */
+    public static final String LABELS_elevate_word_permissions = "{labels.elevate_word_permissions}";
 
     /** The key of the message: Boost */
     public static final String LABELS_elevate_word_boost = "{labels.elevate_word_boost}";

+ 4 - 0
src/main/resources/fess_indices/.fess_config/elevate_word.json

@@ -23,6 +23,10 @@
         "type": "string",
         "index": "not_analyzed"
       },
+      "permissions": {
+        "type": "string",
+        "index": "not_analyzed"
+      },
       "boost": {
         "type": "float"
       },

+ 3 - 4
src/main/resources/fess_label.properties

@@ -129,8 +129,7 @@ labels.q=Query
 labels.roles=Roles
 labels.suggestSearchLog=Suggest Search Log
 labels.suggestWord=Suggest Word
-labels.targetLabel=Target Label
-labels.targetRole=Target Role
+labels.targetLabel=Label
 labels.term=Term
 labels.searchParams=Search Parameters
 labels.fields=Fields
@@ -290,7 +289,7 @@ labels.max_access_count=Max Access Count
 labels.number_of_thread=The number of Tread
 labels.interval_time=Interval time
 labels.millisec=ms
-labels.permission_type=Permission
+labels.permissions=Permissions
 labels.label_type=Label
 labels.file_crawling_button_create=Create
 labels.file_crawling_button_create_job=Create new job
@@ -628,7 +627,7 @@ labels.elevate_word_button_upload=Upload
 labels.elevate_word_list_suggest_word=Word
 labels.elevate_word_suggest_word=Word
 labels.elevate_word_reading=Reading
-labels.elevate_word_target_role=Role
+labels.elevate_word_permissions=Permissions
 labels.elevate_word_boost=Boost
 labels.elevate_word_file=Additional Word File
 labels.bad_word_configuration=Bad Word

+ 3 - 4
src/main/resources/fess_label_en.properties

@@ -129,8 +129,7 @@ labels.q=Query
 labels.roles=Roles
 labels.suggestSearchLog=Suggest Search Log
 labels.suggestWord=Suggest Word
-labels.targetLabel=Target Label
-labels.targetRole=Target Role
+labels.targetLabel=Label
 labels.term=Term
 labels.searchParams=Search Parameters
 labels.fields=Fields
@@ -290,7 +289,7 @@ labels.max_access_count=Max Access Count
 labels.number_of_thread=The number of Tread
 labels.interval_time=Interval time
 labels.millisec=ms
-labels.permission_type=Permission
+labels.permissions=Permissions
 labels.label_type=Label
 labels.file_crawling_button_create=Create
 labels.file_crawling_button_create_job=Create new job
@@ -628,7 +627,7 @@ labels.elevate_word_button_upload=Upload
 labels.elevate_word_list_suggest_word=Word
 labels.elevate_word_suggest_word=Word
 labels.elevate_word_reading=Reading
-labels.elevate_word_target_role=Role
+labels.elevate_word_permissions=Permissions
 labels.elevate_word_boost=Boost
 labels.elevate_word_file=Additional Word File
 labels.bad_word_configuration=Bad Word

+ 3 - 4
src/main/resources/fess_label_ja.properties

@@ -129,8 +129,7 @@ labels.q=\u30af\u30a8\u30ea\u30fc
 labels.roles=\u30ed\u30fc\u30eb
 labels.suggestSearchLog=\u30b5\u30b8\u30a7\u30b9\u30c8\u7528\u691c\u7d22\u30ed\u30b0
 labels.suggestWord=\u30b5\u30b8\u30a7\u30b9\u30c8\u30ef\u30fc\u30c9
-labels.targetLabel=\u5bfe\u8c61\u306e\u30e9\u30d9\u30eb
-labels.targetRole=\u5bfe\u8c61\u306e\u30ed\u30fc\u30eb
+labels.targetLabel=\u30e9\u30d9\u30eb
 labels.term=\u691c\u7d22\u8a9e
 labels.searchParams=\u691c\u7d22\u30d1\u30e9\u30e1\u30fc\u30bf
 labels.fields=\u30d5\u30a3\u30fc\u30eb\u30c9
@@ -286,7 +285,7 @@ labels.max_access_count=\u6700\u5927\u30a2\u30af\u30bb\u30b9\u6570
 labels.number_of_thread=\u30b9\u30ec\u30c3\u30c9\u6570
 labels.interval_time=\u9593\u9694
 labels.millisec=\u30df\u30ea\u79d2
-labels.permission_type=\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3
+labels.permissions=\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3
 labels.label_type=\u30e9\u30d9\u30eb
 labels.file_crawling_button_create=\u4f5c\u6210
 labels.file_crawling_button_create_job=\u65b0\u3057\u3044\u30b8\u30e7\u30d6\u306e\u4f5c\u6210
@@ -624,7 +623,7 @@ labels.elevate_word_button_upload=\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9
 labels.elevate_word_list_suggest_word=\u5358\u8a9e
 labels.elevate_word_suggest_word=\u5358\u8a9e
 labels.elevate_word_reading=\u8aad\u307f
-labels.elevate_word_target_role=\u30ed\u30fc\u30eb
+labels.elevate_word_permissions=\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3
 labels.elevate_word_boost=\u30d6\u30fc\u30b9\u30c8\u5024
 labels.elevate_word_file=\u8ffd\u52a0\u30ef\u30fc\u30c9\u30d5\u30a1\u30a4\u30eb
 labels.bad_word_configuration=\u9664\u5916\u30ef\u30fc\u30c9

+ 0 - 2
src/main/resources/fess_label_ko.properties

@@ -128,7 +128,6 @@ labels.roles = \ub864
 labels.suggestSearchLog = \uc11c\uc81c\uc2a4\ud2b8 \uc6a9 \uac80\uc0c9 \ub85c\uadf8
 labels.suggestWord = \uc11c\uc81c\uc2a4\ud2b8 \uc6cc\ub4dc
 labels.targetLabel = \ub300\uc0c1 \ub808\uc774\ube14
-labels.targetRole = \ub300\uc0c1\uc758 \uc5ed\ud560
 labels.term = \uac80\uc0c9\uc5b4
 labels.searchParams = \uac80\uc0c9 \ub9e4\uac1c \ubcc0\uc218
 labels.fields = \ud544\ub4dc
@@ -619,7 +618,6 @@ labels.elevate_word_button_upload = \uc5c5\ub85c\ub4dc
 labels.elevate_word_list_suggest_word = \ub2e8\uc5b4
 labels.elevate_word_suggest_word = \ub2e8\uc5b4
 labels.elevate_word_reading = \uc77d\uae30
-labels.elevate_word_target_role = \ub864
 labels.elevate_word_boost = \ubd80\uc2a4\ud2b8 \uac12
 labels.elevate_word_file = \ucd94\uac00 \uc6cc\ub4dc \ud30c\uc77c
 labels.bad_word_configuration = \uc81c\uc678 \ub2e8\uc5b4

+ 1 - 1
src/main/webapp/WEB-INF/view/admin/dataconfig/admin_dataconfig_details.jsp

@@ -83,7 +83,7 @@
 												<td>${f:h(boost)}<la:hidden property="boost" /></td>
 											</tr>
 											<tr>
-												<th><la:message key="labels.permission_type" /></th>
+												<th><la:message key="labels.permissions" /></th>
 												<td>${f:br(f:h(permissions))}<la:hidden
 														property="permissions" /></td>
 											</tr>

+ 1 - 1
src/main/webapp/WEB-INF/view/admin/dataconfig/admin_dataconfig_edit.jsp

@@ -95,7 +95,7 @@
 									</div>
 									<div class="form-group">
 										<label for="permissions" class="col-sm-3 control-label"><la:message
-												key="labels.permission_type" /></label>
+												key="labels.permissions" /></label>
 										<div class="col-sm-9">
 											<la:errors property="permissions" />
 											<la:textarea property="permissions" styleClass="form-control"

+ 3 - 3
src/main/webapp/WEB-INF/view/admin/elevateword/admin_elevateword_details.jsp

@@ -100,9 +100,9 @@
 												<td>${f:h(reading)}<la:hidden property="reading" /></td>
 											</tr>
 											<tr>
-												<th><la:message key="labels.elevate_word_target_role" /></th>
-												<td>${f:br(f:h(targetRole))}<la:hidden
-														property="targetRole" /></td>
+												<th><la:message key="labels.elevate_word_permissions" /></th>
+												<td>${f:br(f:h(permissions))}<la:hidden
+														property="permissions" /></td>
 											</tr>
 											<tr>
 												<th><la:message key="labels.label_type" /></th>

+ 4 - 4
src/main/webapp/WEB-INF/view/admin/elevateword/admin_elevateword_edit.jsp

@@ -102,11 +102,11 @@
 										</div>
 									</div>
 									<div class="form-group">
-										<label for="targetRole" class="col-sm-3 control-label"><la:message
-												key="labels.elevate_word_target_role" /></label>
+										<label for="permissions" class="col-sm-3 control-label"><la:message
+												key="labels.elevate_word_permissions" /></label>
 										<div class="col-sm-9">
-											<la:errors property="targetRole" />
-											<la:text property="targetRole" styleClass="form-control" />
+											<la:errors property="permissions" />
+											<la:text property="permissions" styleClass="form-control" />
 										</div>
 									</div>
 									<div class="form-group">

+ 1 - 1
src/main/webapp/WEB-INF/view/admin/fileconfig/admin_fileconfig_details.jsp

@@ -113,7 +113,7 @@
 												<td>${f:h(boost)}<la:hidden property="boost" /></td>
 											</tr>
 											<tr>
-												<th><la:message key="labels.permission_type" /></th>
+												<th><la:message key="labels.permissions" /></th>
 												<td>${f:br(f:h(permissions))}<la:hidden
 														property="permissions" /></td>
 											</tr>

+ 1 - 1
src/main/webapp/WEB-INF/view/admin/fileconfig/admin_fileconfig_edit.jsp

@@ -158,7 +158,7 @@
 									</div>
 									<div class="form-group">
 										<label for="permissions" class="col-sm-3 control-label"><la:message
-												key="labels.permission_type" /></label>
+												key="labels.permissions" /></label>
 										<div class="col-sm-9">
 											<la:errors property="permissions" />
 											<la:textarea property="permissions" styleClass="form-control"

+ 1 - 1
src/main/webapp/WEB-INF/view/admin/labeltype/admin_labeltype_details.jsp

@@ -69,7 +69,7 @@
 														property="excludedPaths" /></td>
 											</tr>
 											<tr>
-												<th><la:message key="labels.permission_type" /></th>
+												<th><la:message key="labels.permissions" /></th>
 												<td>${f:br(f:h(permissions))}<la:hidden
 														property="permissions" /></td>
 											</tr>

+ 1 - 1
src/main/webapp/WEB-INF/view/admin/labeltype/admin_labeltype_edit.jsp

@@ -80,7 +80,7 @@
 									</div>
 									<div class="form-group">
 										<label for="permissions" class="col-sm-3 control-label"><la:message
-												key="labels.permission_type" /></label>
+												key="labels.permissions" /></label>
 										<div class="col-sm-9">
 											<la:errors property="permissions" />
 											<la:textarea property="permissions" styleClass="form-control"

+ 1 - 1
src/main/webapp/WEB-INF/view/admin/webconfig/admin_webconfig_details.jsp

@@ -117,7 +117,7 @@
 												<td>${f:h(boost)}<la:hidden property="boost" /></td>
 											</tr>
 											<tr>
-												<th><la:message key="labels.permission_type" /></th>
+												<th><la:message key="labels.permissions" /></th>
 												<td>${f:br(f:h(permissions))}<la:hidden
 														property="permissions" /></td>
 											</tr>

+ 1 - 1
src/main/webapp/WEB-INF/view/admin/webconfig/admin_webconfig_edit.jsp

@@ -166,7 +166,7 @@
 									</div>
 									<div class="form-group">
 										<label for="permissions" class="col-sm-3 control-label"><la:message
-												key="labels.permission_type" /></label>
+												key="labels.permissions" /></label>
 										<div class="col-sm-9">
 											<la:errors property="permissions" />
 											<la:textarea property="permissions" styleClass="form-control"