#494 change to PermissionHelper

This commit is contained in:
Shinsuke Sugaya 2016-05-01 21:43:36 +09:00
parent 22f840df13
commit 35dd5d95b1
8 changed files with 73 additions and 39 deletions

View file

@ -34,7 +34,8 @@ import org.codelibs.fess.app.web.CrudMode;
import org.codelibs.fess.app.web.base.FessAdminAction;
import org.codelibs.fess.ds.DataStoreFactory;
import org.codelibs.fess.es.config.exentity.DataConfig;
import org.codelibs.fess.util.PermissionUtil;
import org.codelibs.fess.helper.PermissionHelper;
import org.codelibs.fess.util.ComponentUtil;
import org.codelibs.fess.util.RenderDataUtil;
import org.codelibs.fess.util.StreamUtil;
import org.dbflute.optional.OptionalEntity;
@ -145,8 +146,9 @@ public class AdminDataconfigAction extends FessAdminAction {
copyOp.excludeNull();
copyOp.exclude("permissions");
});
final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
form.permissions =
StreamUtil.of(entity.getPermissions()).map(s -> PermissionUtil.decode(s))
StreamUtil.of(entity.getPermissions()).map(s -> permissionHelper.decode(s))
.filter(s -> StringUtil.isNotBlank(s)).distinct().collect(Collectors.joining("\n"));
}).orElse(() -> {
throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), () -> asListHtml());
@ -181,8 +183,9 @@ public class AdminDataconfigAction extends FessAdminAction {
copyOp.excludeNull();
copyOp.exclude("permissions");
});
final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
form.permissions =
StreamUtil.of(entity.getPermissions()).map(s -> PermissionUtil.decode(s))
StreamUtil.of(entity.getPermissions()).map(s -> permissionHelper.decode(s))
.filter(s -> StringUtil.isNotBlank(s)).distinct()
.collect(Collectors.joining("\n"));
form.crudMode = crudMode;
@ -296,7 +299,8 @@ public class AdminDataconfigAction extends FessAdminAction {
entity,
op -> op.exclude(Stream.concat(Stream.of(Constants.COMMON_CONVERSION_RULE), Stream.of("permissions")).toArray(
n -> new String[n])));
entity.setPermissions(StreamUtil.of(form.permissions.split("\n")).map(s -> PermissionUtil.encode(s))
final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
entity.setPermissions(StreamUtil.of(form.permissions.split("\n")).map(s -> permissionHelper.encode(s))
.filter(s -> StringUtil.isNotBlank(s)).distinct().toArray(n -> new String[n]));
return entity;
});

View file

@ -29,7 +29,8 @@ import org.codelibs.fess.app.service.RoleTypeService;
import org.codelibs.fess.app.web.CrudMode;
import org.codelibs.fess.app.web.base.FessAdminAction;
import org.codelibs.fess.es.config.exentity.FileConfig;
import org.codelibs.fess.util.PermissionUtil;
import org.codelibs.fess.helper.PermissionHelper;
import org.codelibs.fess.util.ComponentUtil;
import org.codelibs.fess.util.RenderDataUtil;
import org.codelibs.fess.util.StreamUtil;
import org.dbflute.optional.OptionalEntity;
@ -140,8 +141,9 @@ public class AdminFileconfigAction extends FessAdminAction {
copyOp.excludeNull();
copyOp.exclude("permissions");
});
final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
form.permissions =
StreamUtil.of(entity.getPermissions()).map(s -> PermissionUtil.decode(s))
StreamUtil.of(entity.getPermissions()).map(s -> permissionHelper.decode(s))
.filter(s -> StringUtil.isNotBlank(s)).distinct().collect(Collectors.joining("\n"));
}).orElse(() -> {
throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), () -> asListHtml());
@ -176,8 +178,9 @@ public class AdminFileconfigAction extends FessAdminAction {
copyOp.excludeNull();
copyOp.exclude("permissions");
});
final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
form.permissions =
StreamUtil.of(entity.getPermissions()).map(s -> PermissionUtil.decode(s))
StreamUtil.of(entity.getPermissions()).map(s -> permissionHelper.decode(s))
.filter(s -> StringUtil.isNotBlank(s)).distinct()
.collect(Collectors.joining("\n"));
form.crudMode = crudMode;
@ -293,7 +296,8 @@ public class AdminFileconfigAction extends FessAdminAction {
entity,
op -> op.exclude(Stream.concat(Stream.of(Constants.COMMON_CONVERSION_RULE), Stream.of("permissions")).toArray(
n -> new String[n])));
entity.setPermissions(StreamUtil.of(form.permissions.split("\n")).map(s -> PermissionUtil.encode(s))
final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
entity.setPermissions(StreamUtil.of(form.permissions.split("\n")).map(s -> permissionHelper.encode(s))
.filter(s -> StringUtil.isNotBlank(s)).distinct().toArray(n -> new String[n]));
return entity;
});

View file

@ -28,7 +28,8 @@ import org.codelibs.fess.app.service.RoleTypeService;
import org.codelibs.fess.app.web.CrudMode;
import org.codelibs.fess.app.web.base.FessAdminAction;
import org.codelibs.fess.es.config.exentity.LabelType;
import org.codelibs.fess.util.PermissionUtil;
import org.codelibs.fess.helper.PermissionHelper;
import org.codelibs.fess.util.ComponentUtil;
import org.codelibs.fess.util.RenderDataUtil;
import org.codelibs.fess.util.StreamUtil;
import org.dbflute.optional.OptionalEntity;
@ -138,8 +139,9 @@ public class AdminLabeltypeAction extends FessAdminAction {
copyOp.excludeNull();
copyOp.exclude("permissions");
});
final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
form.permissions =
StreamUtil.of(entity.getPermissions()).map(s -> PermissionUtil.decode(s))
StreamUtil.of(entity.getPermissions()).map(s -> permissionHelper.decode(s))
.filter(s -> StringUtil.isNotBlank(s)).distinct().collect(Collectors.joining("\n"));
}).orElse(() -> {
throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), () -> asListHtml());
@ -174,8 +176,9 @@ public class AdminLabeltypeAction extends FessAdminAction {
copyOp.excludeNull();
copyOp.exclude("permissions");
});
final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
form.permissions =
StreamUtil.of(entity.getPermissions()).map(s -> PermissionUtil.decode(s))
StreamUtil.of(entity.getPermissions()).map(s -> permissionHelper.decode(s))
.filter(s -> StringUtil.isNotBlank(s)).distinct()
.collect(Collectors.joining("\n"));
form.crudMode = crudMode;
@ -292,7 +295,8 @@ public class AdminLabeltypeAction extends FessAdminAction {
entity,
op -> op.exclude(Stream.concat(Stream.of(Constants.COMMON_CONVERSION_RULE), Stream.of("permissions")).toArray(
n -> new String[n])));
entity.setPermissions(StreamUtil.of(form.permissions.split("\n")).map(s -> PermissionUtil.encode(s))
final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
entity.setPermissions(StreamUtil.of(form.permissions.split("\n")).map(s -> permissionHelper.encode(s))
.filter(s -> StringUtil.isNotBlank(s)).distinct().toArray(n -> new String[n]));
return entity;
});

View file

@ -30,7 +30,8 @@ import org.codelibs.fess.app.service.WebConfigService;
import org.codelibs.fess.app.web.CrudMode;
import org.codelibs.fess.app.web.base.FessAdminAction;
import org.codelibs.fess.es.config.exentity.WebConfig;
import org.codelibs.fess.util.PermissionUtil;
import org.codelibs.fess.helper.PermissionHelper;
import org.codelibs.fess.util.ComponentUtil;
import org.codelibs.fess.util.RenderDataUtil;
import org.codelibs.fess.util.StreamUtil;
import org.dbflute.optional.OptionalEntity;
@ -142,8 +143,9 @@ public class AdminWebconfigAction extends FessAdminAction {
copyOp.excludeNull();
copyOp.exclude("permissions");
});
final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
form.permissions =
StreamUtil.of(entity.getPermissions()).map(s -> PermissionUtil.decode(s))
StreamUtil.of(entity.getPermissions()).map(s -> permissionHelper.decode(s))
.filter(s -> StringUtil.isNotBlank(s)).distinct().collect(Collectors.joining("\n"));
}).orElse(() -> {
throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), () -> asListHtml());
@ -178,8 +180,9 @@ public class AdminWebconfigAction extends FessAdminAction {
copyOp.excludeNull();
copyOp.exclude("permissions");
});
final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
form.permissions =
StreamUtil.of(entity.getPermissions()).map(s -> PermissionUtil.decode(s))
StreamUtil.of(entity.getPermissions()).map(s -> permissionHelper.decode(s))
.filter(s -> StringUtil.isNotBlank(s)).distinct()
.collect(Collectors.joining("\n"));
form.crudMode = crudMode;
@ -293,7 +296,8 @@ public class AdminWebconfigAction extends FessAdminAction {
entity,
op -> op.exclude(Stream.concat(Stream.of(Constants.COMMON_CONVERSION_RULE), Stream.of("permissions")).toArray(
n -> new String[n])));
entity.setPermissions(StreamUtil.of(form.permissions.split("\n")).map(s -> PermissionUtil.encode(s))
final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
entity.setPermissions(StreamUtil.of(form.permissions.split("\n")).map(s -> permissionHelper.encode(s))
.filter(s -> StringUtil.isNotBlank(s)).distinct().toArray(n -> new String[n]));
return entity;
});

View file

@ -13,26 +13,22 @@
* either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package org.codelibs.fess.util;
package org.codelibs.fess.helper;
import java.util.Locale;
import org.codelibs.core.lang.StringUtil;
import org.codelibs.fess.helper.SystemHelper;
import org.codelibs.fess.mylasta.direction.FessConfig;
import org.codelibs.fess.util.ComponentUtil;
public class PermissionUtil {
private static final String ROLE_PREFIX = "{role}";
public class PermissionHelper {
protected String rolePrefix = "{role}";
private static final String GROUP_PREFIX = "{group}";
protected String groupPrefix = "{group}";
private static final String USER_PREFIX = "{user}";
protected String userPrefix = "{user}";
private PermissionUtil() {
// nothing
}
public static String encode(final String value) {
public String encode(final String value) {
if (StringUtil.isBlank(value)) {
return null;
}
@ -40,29 +36,41 @@ public class PermissionUtil {
final SystemHelper systemHelper = ComponentUtil.getSystemHelper();
final String permission = value.trim();
final String lower = permission.toLowerCase(Locale.ROOT);
if (lower.startsWith(USER_PREFIX) && permission.length() > USER_PREFIX.length()) {
return systemHelper.getSearchRoleByUser(permission.substring(USER_PREFIX.length()));
} else if (lower.startsWith(GROUP_PREFIX) && permission.length() > GROUP_PREFIX.length()) {
return systemHelper.getSearchRoleByGroup(permission.substring(GROUP_PREFIX.length()));
} else if (lower.startsWith(ROLE_PREFIX) && permission.length() > ROLE_PREFIX.length()) {
return systemHelper.getSearchRoleByRole(permission.substring(ROLE_PREFIX.length()));
if (lower.startsWith(userPrefix) && permission.length() > userPrefix.length()) {
return systemHelper.getSearchRoleByUser(permission.substring(userPrefix.length()));
} else if (lower.startsWith(groupPrefix) && permission.length() > groupPrefix.length()) {
return systemHelper.getSearchRoleByGroup(permission.substring(groupPrefix.length()));
} else if (lower.startsWith(rolePrefix) && permission.length() > rolePrefix.length()) {
return systemHelper.getSearchRoleByRole(permission.substring(rolePrefix.length()));
}
return permission;
}
public static String decode(String value) {
public String decode(String value) {
if (StringUtil.isBlank(value)) {
return null;
}
final FessConfig fessConfig = ComponentUtil.getFessConfig();
if (value.startsWith(fessConfig.getRoleSearchUserPrefix()) && value.length() > 1) {
return USER_PREFIX + value.substring(1);
return userPrefix + value.substring(1);
} else if (value.startsWith(fessConfig.getRoleSearchGroupPrefix()) && value.length() > 1) {
return GROUP_PREFIX + value.substring(1);
return groupPrefix + value.substring(1);
} else if (value.startsWith(fessConfig.getRoleSearchRolePrefix()) && value.length() > 1) {
return ROLE_PREFIX + value.substring(1);
return rolePrefix + value.substring(1);
}
return value;
}
public void setRolePrefix(String rolePrefix) {
this.rolePrefix = rolePrefix;
}
public void setGroupPrefix(String groupPrefix) {
this.groupPrefix = groupPrefix;
}
public void setUserPrefix(String userPrefix) {
this.userPrefix = userPrefix;
}
}

View file

@ -34,9 +34,9 @@ import org.codelibs.core.lang.StringUtil;
import org.codelibs.core.misc.Pair;
import org.codelibs.core.misc.Tuple3;
import org.codelibs.fess.Constants;
import org.codelibs.fess.helper.PermissionHelper;
import org.codelibs.fess.mylasta.action.FessUserBean;
import org.codelibs.fess.util.ComponentUtil;
import org.codelibs.fess.util.PermissionUtil;
import org.codelibs.fess.util.StreamUtil;
import org.dbflute.optional.OptionalThing;
import org.elasticsearch.action.search.SearchRequestBuilder;
@ -880,7 +880,8 @@ public interface FessProp {
String getRoleSearchDefaultPermissions();
public default String[] getSearchDefaultPermissionsAsArray() {
return StreamUtil.of(getRoleSearchDefaultPermissions().split(",")).map(p -> PermissionUtil.encode(p))
final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
return StreamUtil.of(getRoleSearchDefaultPermissions().split(",")).map(p -> permissionHelper.encode(p))
.filter(s -> StringUtil.isNotBlank(s)).distinct().toArray(n -> new String[n]);
}

View file

@ -39,6 +39,7 @@ import org.codelibs.fess.helper.JobHelper;
import org.codelibs.fess.helper.KeyMatchHelper;
import org.codelibs.fess.helper.LabelTypeHelper;
import org.codelibs.fess.helper.PathMappingHelper;
import org.codelibs.fess.helper.PermissionHelper;
import org.codelibs.fess.helper.PopularWordHelper;
import org.codelibs.fess.helper.ProcessHelper;
import org.codelibs.fess.helper.QueryHelper;
@ -63,6 +64,8 @@ import org.lastaflute.web.servlet.request.RequestManager;
public final class ComponentUtil {
private static final String PERMISSION_HELPER = "permissionHelper";
private static final String QUERY_PARSER = "queryParser";
private static final String DOCUMENT_HELPER = "documentHelper";
@ -331,6 +334,10 @@ public final class ComponentUtil {
return getComponent(QUERY_PARSER);
}
public static PermissionHelper getPermissionHelper() {
return getComponent(PERMISSION_HELPER);
}
public static CrawlerClientFactory getCrawlerClientFactory() {
return getComponent(CrawlerClientFactory.class);
}

View file

@ -22,6 +22,8 @@
</component>
<component name="processHelper" class="org.codelibs.fess.helper.ProcessHelper">
</component>
<component name="permissionHelper" class="org.codelibs.fess.helper.PermissionHelper">
</component>
<component name="sambaHelper" class="org.codelibs.fess.helper.SambaHelper">
</component>
<component name="systemHelper" class="org.codelibs.fess.helper.SystemHelper">