From 10a7bc828029824c3dcf28e067d37f8ce944e4ca Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Mon, 20 Jan 2020 16:43:34 +0100 Subject: [PATCH] [New] Added StrolchValueSearch --- .../li/strolch/search/StrolchValueSearch.java | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 li.strolch.agent/src/main/java/li/strolch/search/StrolchValueSearch.java diff --git a/li.strolch.agent/src/main/java/li/strolch/search/StrolchValueSearch.java b/li.strolch.agent/src/main/java/li/strolch/search/StrolchValueSearch.java new file mode 100644 index 000000000..04a9691c9 --- /dev/null +++ b/li.strolch.agent/src/main/java/li/strolch/search/StrolchValueSearch.java @@ -0,0 +1,69 @@ +package li.strolch.search; + +import static li.strolch.utils.helper.ExceptionHelper.getExceptionMessage; + +import java.util.Collection; +import java.util.stream.Stream; + +import li.strolch.exception.StrolchAccessDeniedException; +import li.strolch.model.StrolchModelConstants; +import li.strolch.privilege.base.PrivilegeException; +import li.strolch.privilege.base.PrivilegeModelException; +import li.strolch.privilege.model.PrivilegeContext; +import li.strolch.privilege.model.Restrictable; + +public class StrolchValueSearch extends ValueSearch implements Restrictable { + + private String privilegeValue; + + public StrolchValueSearch() { + this.privilegeValue = getClass().getName(); + } + + /** + * @see li.strolch.privilege.model.Restrictable#getPrivilegeName() + */ + @Override + public String getPrivilegeName() { + return StrolchSearch.class.getName(); + } + + /** + * @see li.strolch.privilege.model.Restrictable#getPrivilegeValue() + */ + @Override + public Object getPrivilegeValue() { + return this.privilegeValue; + } + + /** + * Marks this search as an internal search, thus allowing it to be performed without the authenticated user having + * the specific privilege, provided the {@link StrolchModelConstants#INTERNAL} flag is on the search privilege + * + * @return this object for chaining + */ + public StrolchValueSearch internal() { + this.privilegeValue = StrolchModelConstants.INTERNAL; + return this; + } + + protected void assertHasPrivilege(PrivilegeContext ctx) { + try { + ctx.validateAction(this); + } catch (PrivilegeModelException e) { + throw e; + } catch (PrivilegeException e) { + throw new StrolchAccessDeniedException(ctx.getCertificate(), this, getExceptionMessage(e), e); + } + } + + @Override + public SearchResult search(Stream stream) { + return super.search(stream); + } + + @Override + public SearchResult search(Collection input) { + return super.search(input); + } +}