diff --git a/src/main/java/de/urmel_dl/dbt/authorization/DBTStrategy.java b/src/main/java/de/urmel_dl/dbt/authorization/DBTStrategy.java
new file mode 100644
index 00000000..aa9b0a7a
--- /dev/null
+++ b/src/main/java/de/urmel_dl/dbt/authorization/DBTStrategy.java
@@ -0,0 +1,66 @@
+package de.urmel_dl.dbt.authorization;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.mycore.common.MCRSessionMgr;
+import org.mycore.common.MCRUserInformation;
+import org.mycore.common.config.MCRConfiguration2;
+import org.mycore.datamodel.common.MCRCreatorCache;
+import org.mycore.datamodel.metadata.MCRMetadataManager;
+import org.mycore.datamodel.metadata.MCRObject;
+import org.mycore.datamodel.metadata.MCRObjectID;
+import org.mycore.mir.authorization.MIRStrategy;
+
+public class DBTStrategy extends MIRStrategy {
+ private static Logger LOGGER = LogManager.getLogger();
+
+ private static final String FLAG_TYPE = "dbt-dini";
+
+ private static final String FLAG_VALUE = "exclude";
+
+ private static final String CREATOR_ROLE = MCRConfiguration2.getString("MCR.Access.Strategy.CreatorRole")
+ .orElse("submitter");
+
+ @Override
+ public boolean checkPermission(String id, String permission) {
+ final boolean hasPermission = super.checkPermission(id, permission);
+ return hasPermission || checkPermissionForNonDINI(id, permission);
+ }
+
+ private boolean checkPermissionForNonDINI(String id, String permission) {
+ if (!MCRObjectID.isValid(id)) {
+ return false;
+ }
+ final MCRObjectID mcrId = MCRObjectID.getInstance(id);
+ MCRUserInformation currentUser = MCRSessionMgr.getCurrentSession().getUserInformation();
+ return currentUser.isUserInRole(CREATOR_ROLE) && isCurrentUserCreator(mcrId, currentUser)
+ && isNonDINIDocument(mcrId);
+
+ }
+
+ private static boolean isCurrentUserCreator(MCRObjectID mcrId, MCRUserInformation currentUser) {
+ try {
+ String creator = MCRCreatorCache.getCreator(mcrId);
+ return currentUser.getUserID().equals(creator);
+ } catch (ExecutionException e) {
+ LOGGER.error("Error while getting creator information.", e);
+ return false;
+ }
+ }
+
+ private static boolean isNonDINIDocument(MCRObjectID mcrId) {
+ MCRObjectID objectID = "derivate".equals(mcrId.getTypeId())
+ ? MCRMetadataManager.getObjectId(mcrId, 1, TimeUnit.DAYS)
+ : mcrId;
+ if (objectID == null) {
+ LOGGER.error("Could not find object id to {}.", mcrId);
+ return false;
+ }
+ final MCRObject obj = MCRMetadataManager.retrieveMCRObject(objectID);
+ return obj.getService().getFlags(FLAG_TYPE).contains(FLAG_VALUE);
+ }
+
+}
diff --git a/src/main/resources/META-INF/resources/editor/editor-dbt.xed b/src/main/resources/META-INF/resources/editor/editor-dbt.xed
index 60aab2a6..59c474e9 100644
--- a/src/main/resources/META-INF/resources/editor/editor-dbt.xed
+++ b/src/main/resources/META-INF/resources/editor/editor-dbt.xed
@@ -69,7 +69,7 @@
@@ -80,4 +80,26 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/config/dbt/messages_de.properties b/src/main/resources/config/dbt/messages_de.properties
index a55a5f24..57c15245 100644
--- a/src/main/resources/config/dbt/messages_de.properties
+++ b/src/main/resources/config/dbt/messages_de.properties
@@ -193,6 +193,8 @@ editor.contract.disagree = Ich lehne ab
editor.contract.publish = D\u00FCrfen wir ver\u00F6ffentlichen?
editor.contract.text = Ich habe den Ver\u00F6ffentlichungsvertrag gelesen und stimme ihm zu. Insbesondere versichere ich, dass mit der Bereitstellung dieses Werkes keine Rechte Dritter, insbesondere aus dem geltenden Urheberrecht, verletzt werden.
editor.contract.validation = Bitte stimmen Sie der Ver\u00F6ffentlichung zu.
+editor.diniExclude = Kurzzeit-Dokument "Digitales\u00A0SoSe\u00A02020"
+editor.diniExclude.help = Wenn die Auswahlbox gew\u00E4hlt wird, ist dieses Dokument vom urspr\u00FCnglichen Einsender auch im Status "ver\u00F6ffentlicht" noch \u00E4nder- und l\u00F6schbar. Es bekommt keinen persistenten Identifikator und ist nicht \u00FCber OAI sichtbar.
editor.oai = OAI Freigabe
editor.oai.help = W\u00E4hlen Sie hier aus f\u00FCr wenn das Dokument in der OAI Schnittstelle freigegeben werden soll.
diff --git a/src/main/resources/config/dbt/messages_en.properties b/src/main/resources/config/dbt/messages_en.properties
index 4f2d3663..e52af530 100644
--- a/src/main/resources/config/dbt/messages_en.properties
+++ b/src/main/resources/config/dbt/messages_en.properties
@@ -191,6 +191,8 @@ editor.contract.disagree = I disagree
editor.contract.publish = May we publish?
editor.contract.text = I have read the publication contract (in German only) and I agree. In particular, I assure that the provision of this work does not infringe any rights of third parties, in particular under applicable copyright laws.
editor.contract.validation = Please agree to the publication contract.
+editor.diniExclude = Short-living document "digital\u00A0summer\u00A0semester\u00A02020"
+editor.diniExclude.help = If checkbox is selected the document can still be changed and deleted by the original submitter, if the stat is published. The document will not be visible by OAI and will not get a persistent identifier.
editor.oai = OAI enabling
editor.oai.help = Chose who can access the document over the OAI interface.
diff --git a/src/main/resources/config/dbt/mycore.properties b/src/main/resources/config/dbt/mycore.properties
index b4b5c7e8..3c1e1891 100644
--- a/src/main/resources/config/dbt/mycore.properties
+++ b/src/main/resources/config/dbt/mycore.properties
@@ -270,3 +270,12 @@ MCR.Access.Strategy.SubmittedCategory=%MCR.Access.Strategy.SubmittedCategory%,st
MCR.ContentTransformer.deepgreenjats2mods.Class=org.mycore.common.content.transformer.MCRXSLTransformer
MCR.ContentTransformer.deepgreenjats2mods.Stylesheet=xsl/sword/jats2mods.xsl
+
+######################################################################
+# Digital Summer Semester 2020 DBT-326
+######################################################################
+MCR.OAIDataProvider.OAI2.Search.Restriction=+objectType\:mods -dbt.dini\:exclude
+MCR.Access.Strategy.Class=de.urmel_dl.dbt.authorization.DBTStrategy
+MIR.AccessKeyStrategy.FallbackClass=de.urmel_dl.dbt.authorization.DBTStrategy
+MIR.OwnerStrategy.FallbackClass=de.urmel_dl.dbt.authorization.DBTStrategy
+MCR.URIResolver.xslImports.solr-document=%MCR.URIResolver.xslImports.solr-document%,dbt-solr.xsl
diff --git a/src/main/resources/config/dbt/solr/main/solr-schema.json b/src/main/resources/config/dbt/solr/main/solr-schema.json
index 035b026d..61bcf482 100644
--- a/src/main/resources/config/dbt/solr/main/solr-schema.json
+++ b/src/main/resources/config/dbt/solr/main/solr-schema.json
@@ -48,5 +48,11 @@
"name": "slotId",
"type": "string"
}
+ },
+ {
+ "add-field": {
+ "name": "dbt.dini",
+ "type": "string"
+ }
}
]
diff --git a/src/main/resources/xsl/dbt-solr.xsl b/src/main/resources/xsl/dbt-solr.xsl
new file mode 100644
index 00000000..81270582
--- /dev/null
+++ b/src/main/resources/xsl/dbt-solr.xsl
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+