summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul-Christian Volkmer2023-04-13 21:18:42 +0200
committerPaul-Christian Volkmer2023-04-13 21:19:36 +0200
commitc4c03bfc66d0773544722060d02dc587da93bfbc (patch)
treea47a59e14a8824c655fe7eb5026062a63e8dfa17 /src
parent612da8e5b8a8539cd896596726fadd3eb68b63e9 (diff)
Erlaube keinen Protokollauszug, wenn keine Berechtigung auf Zielformular
Dies verhindert Zugriff auf den Protokollauszug beliebiger MTB-Formulare durch "Erraten" von IDs. Liegt keine Berechtigung für das Therapieplan-Formular (mit gegebener ID) vor, können auch keine referenzierten MTB-Formulare abgerufen und deren Inhalt für den Protokollauszug verwendet werden.
Diffstat (limited to 'src')
-rw-r--r--src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java30
-rw-r--r--src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java20
2 files changed, 43 insertions, 7 deletions
diff --git a/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java b/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java
index e645925..6ad18b0 100644
--- a/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java
+++ b/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java
@@ -1,5 +1,7 @@
package DNPM.analyzer;
+import DNPM.security.DelegatingDataBasedPermissionEvaluator;
+import DNPM.security.PermissionType;
import DNPM.services.Studie;
import DNPM.services.StudienService;
import DNPM.services.TherapieplanServiceFactory;
@@ -10,6 +12,7 @@ import de.itc.onkostar.api.analysis.AnalyseTriggerEvent;
import de.itc.onkostar.api.analysis.AnalyzerRequirement;
import de.itc.onkostar.api.analysis.IProcedureAnalyzer;
import de.itc.onkostar.api.analysis.OnkostarPluginType;
+import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import java.util.List;
@@ -30,14 +33,18 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer {
private final MtbService mtbService;
+ private final DelegatingDataBasedPermissionEvaluator permissionEvaluator;
+
public TherapieplanAnalyzer(
final StudienService studienService,
final TherapieplanServiceFactory therapieplanServiceFactory,
- final MtbService mtbService
+ final MtbService mtbService,
+ final DelegatingDataBasedPermissionEvaluator permissionEvaluator
) {
this.studienService = studienService;
this.therapieplanServiceFactory = therapieplanServiceFactory;
this.mtbService = mtbService;
+ this.permissionEvaluator = permissionEvaluator;
}
@Override
@@ -152,11 +159,22 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer {
return "";
}
- return mtbService.getProtocol(
- therapieplanServiceFactory
- .currentUsableInstance()
- .findReferencedMtbs(procedureId.get())
- );
+ if (
+ permissionEvaluator.hasPermission(
+ SecurityContextHolder.getContext().getAuthentication(),
+ procedureId.get(),
+ Procedure.class.getSimpleName(),
+ PermissionType.READ
+ )
+ ) {
+ return mtbService.getProtocol(
+ therapieplanServiceFactory
+ .currentUsableInstance()
+ .findReferencedMtbs(procedureId.get())
+ );
+ }
+
+ return "";
}
}
diff --git a/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java b/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java
index 2b10c5a..c2c17f1 100644
--- a/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java
+++ b/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java
@@ -1,5 +1,7 @@
package DNPM.analyzer;
+import DNPM.security.DelegatingDataBasedPermissionEvaluator;
+import DNPM.security.PermissionType;
import DNPM.services.*;
import DNPM.services.mtb.MtbService;
import de.itc.onkostar.api.IOnkostarApi;
@@ -40,11 +42,14 @@ class TherapieplanAnalyzerTest {
@Mock
private MtbService mtbService;
+ @Mock
+ private DelegatingDataBasedPermissionEvaluator permissionEvaluator;
+
private TherapieplanAnalyzer therapieplanAnalyzer;
@BeforeEach
void setUp() {
- this.therapieplanAnalyzer = new TherapieplanAnalyzer(studienService, therapieplanServiceFactory, mtbService);
+ this.therapieplanAnalyzer = new TherapieplanAnalyzer(studienService, therapieplanServiceFactory, mtbService, permissionEvaluator);
}
@Test
@@ -94,6 +99,8 @@ class TherapieplanAnalyzerTest {
when(this.therapieplanServiceFactory.currentUsableInstance())
.thenReturn(therapieplanService);
+ when(this.permissionEvaluator.hasPermission(any(), anyInt(), anyString(), any(PermissionType.class))).thenReturn(true);
+
var input = Map.of("id", (Object) 1234);
this.therapieplanAnalyzer.getProtokollauszug(input);
@@ -102,4 +109,15 @@ class TherapieplanAnalyzerTest {
assertThat(captor.getValue()).hasSize(1);
}
+ @Test
+ void shouldNotRequestProtokollauszugDueToNoPermission() {
+ when(this.permissionEvaluator.hasPermission(any(), anyInt(), anyString(), any(PermissionType.class)))
+ .thenReturn(false);
+
+ var input = Map.of("id", (Object) 1234);
+ this.therapieplanAnalyzer.getProtokollauszug(input);
+
+ verify(mtbService, times(0)).getProtocol(anyList());
+ }
+
}