diff --git a/src/main/java/biblivre/core/properties/MenuPropertiesService.java b/src/main/java/biblivre/core/properties/MenuPropertiesService.java new file mode 100644 index 00000000..4e7ee0dc --- /dev/null +++ b/src/main/java/biblivre/core/properties/MenuPropertiesService.java @@ -0,0 +1,15 @@ +package biblivre.core.properties; + +import java.util.Collection; +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Service; + +@Service +@ConfigurationProperties(prefix = "biblivre.menus") +@Getter +@Setter +public class MenuPropertiesService { + private Collection disabled; +} diff --git a/src/main/java/biblivre/login/MenuProviderImpl.java b/src/main/java/biblivre/login/MenuProviderImpl.java index f2e2bd96..1ac10101 100644 --- a/src/main/java/biblivre/login/MenuProviderImpl.java +++ b/src/main/java/biblivre/login/MenuProviderImpl.java @@ -1,17 +1,15 @@ package biblivre.login; +import biblivre.core.properties.MenuPropertiesService; import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; import java.util.function.Predicate; import org.json.JSONArray; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.Resource; import org.springframework.stereotype.Component; @@ -23,6 +21,8 @@ public class MenuProviderImpl implements MenuProvider { private Map prioritizedMenus; + @Autowired private MenuPropertiesService menuPropertiesService; + @Override public Map> getAllowedModules(Predicate filter) { if (prioritizedMenus == null) { @@ -43,7 +43,10 @@ public Map> getAllowedModules(Predicate filter) { obj -> { String item = obj.toString(); - if (filter.test(item)) { + if (filter.test(item) + && !menuPropertiesService + .getDisabled() + .contains(item)) { allowedModules .computeIfAbsent(name, __ -> new ArrayList<>()) .add(item); diff --git a/src/main/java/biblivre/menu/Handler.java b/src/main/java/biblivre/menu/Handler.java index 7f722417..15121a49 100644 --- a/src/main/java/biblivre/menu/Handler.java +++ b/src/main/java/biblivre/menu/Handler.java @@ -37,6 +37,7 @@ import biblivre.core.ExtendedRequest; import biblivre.core.ExtendedResponse; import biblivre.core.SchemaThreadLocal; +import biblivre.core.properties.MenuPropertiesService; import biblivre.core.schemas.SchemaBO; import biblivre.core.translations.LanguageBO; import biblivre.core.translations.LanguageDTO; @@ -61,6 +62,8 @@ public class Handler extends AbstractHandler { private LanguageBO languageBO; private SchemaBO schemaBO; + @Autowired private MenuPropertiesService menuPropertiesService; + public void i18n(ExtendedRequest request, ExtendedResponse response) { if (request.getBoolean("from_translations")) { setJspURL("/WEB-INF/jsp/administration/translations.jsp"); @@ -299,6 +302,10 @@ public void administrationReports(ExtendedRequest request, ExtendedResponse resp } public void administrationCustomReports(ExtendedRequest request, ExtendedResponse response) { + if (menuPropertiesService.getDisabled().contains("administration_custom_reports")) { + throw new IllegalArgumentException("Custom reports are not enabled."); + } + setJspURL("/WEB-INF/jsp/administration/custom_reports.jsp"); }