Skip to content

Commit 53239c7

Browse files
Merge pull request #13360 from SORMAS-Foundation/feature-13297_user_rights_system_for_message_types
#13297 - Redesign User Rights System for Message Types
2 parents 6991332 + 6ee40ed commit 53239c7

File tree

28 files changed

+483
-130
lines changed

28 files changed

+483
-130
lines changed

sormas-api/src/main/java/de/symeda/sormas/api/user/DefaultUserRole.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1427,9 +1427,13 @@ public Set<UserRight> getDefaultUserRights() {
14271427
CAMPAIGN_FORM_DATA_ARCHIVE,
14281428
CAMPAIGN_FORM_DATA_VIEW_ARCHIVED,
14291429
CAMPAIGN_FORM_DATA_EXPORT,
1430-
EXTERNAL_MESSAGE_VIEW,
1431-
EXTERNAL_MESSAGE_PROCESS,
1432-
EXTERNAL_MESSAGE_DELETE,
1430+
EXTERNAL_MESSAGE_ACCESS,
1431+
EXTERNAL_MESSAGE_LABORATORY_VIEW,
1432+
EXTERNAL_MESSAGE_DOCTOR_DECLARATION_VIEW,
1433+
EXTERNAL_MESSAGE_LABORATORY_PROCESS,
1434+
EXTERNAL_MESSAGE_DOCTOR_DECLARATION_PROCESS,
1435+
EXTERNAL_MESSAGE_LABORATORY_DELETE,
1436+
EXTERNAL_MESSAGE_DOCTOR_DECLARATION_DELETE,
14331437
PERFORM_BULK_OPERATIONS,
14341438
TRAVEL_ENTRY_MANAGEMENT_ACCESS,
14351439
TRAVEL_ENTRY_VIEW,
@@ -1855,9 +1859,13 @@ public Set<UserRight> getDefaultUserRights() {
18551859
CAMPAIGN_FORM_DATA_VIEW,
18561860
CAMPAIGN_FORM_DATA_EDIT,
18571861
CAMPAIGN_FORM_DATA_EXPORT,
1858-
EXTERNAL_MESSAGE_VIEW,
1859-
EXTERNAL_MESSAGE_PROCESS,
1860-
EXTERNAL_MESSAGE_DELETE,
1862+
EXTERNAL_MESSAGE_ACCESS,
1863+
EXTERNAL_MESSAGE_LABORATORY_VIEW,
1864+
EXTERNAL_MESSAGE_DOCTOR_DECLARATION_VIEW,
1865+
EXTERNAL_MESSAGE_LABORATORY_PROCESS,
1866+
EXTERNAL_MESSAGE_DOCTOR_DECLARATION_PROCESS,
1867+
EXTERNAL_MESSAGE_LABORATORY_DELETE,
1868+
EXTERNAL_MESSAGE_DOCTOR_DECLARATION_DELETE,
18611869
TRAVEL_ENTRY_MANAGEMENT_ACCESS,
18621870
TRAVEL_ENTRY_VIEW,
18631871
TRAVEL_ENTRY_CREATE,

sormas-api/src/main/java/de/symeda/sormas/api/user/UserRight.java

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -285,12 +285,21 @@ public enum UserRight {
285285
EXTERNAL_SURVEILLANCE_SHARE(UserRightGroup.EXTERNAL),
286286
EXTERNAL_SURVEILLANCE_DELETE(UserRightGroup.EXTERNAL),
287287

288-
EXTERNAL_MESSAGE_VIEW(UserRightGroup.EXTERNAL),
289-
EXTERNAL_MESSAGE_PROCESS(UserRightGroup.EXTERNAL, UserRight._EXTERNAL_MESSAGE_VIEW,
288+
EXTERNAL_MESSAGE_PUSH(UserRightGroup.EXTERNAL),
289+
290+
EXTERNAL_MESSAGE_ACCESS(UserRightGroup.EXTERNAL),
291+
EXTERNAL_MESSAGE_LABORATORY_VIEW(UserRightGroup.EXTERNAL, UserRight._EXTERNAL_MESSAGE_ACCESS),
292+
EXTERNAL_MESSAGE_DOCTOR_DECLARATION_VIEW(UserRightGroup.EXTERNAL, UserRight._EXTERNAL_MESSAGE_ACCESS),
293+
294+
EXTERNAL_MESSAGE_LABORATORY_PROCESS(UserRightGroup.EXTERNAL, UserRight._EXTERNAL_MESSAGE_ACCESS, UserRight._EXTERNAL_MESSAGE_LABORATORY_VIEW,
290295
UserRight._SAMPLE_CREATE, UserRight._SAMPLE_EDIT, UserRight._PATHOGEN_TEST_CREATE, UserRight._PATHOGEN_TEST_EDIT, UserRight._PATHOGEN_TEST_DELETE,
291296
UserRight._IMMUNIZATION_CREATE, UserRight._IMMUNIZATION_EDIT, UserRight._IMMUNIZATION_DELETE),
292-
EXTERNAL_MESSAGE_PUSH(UserRightGroup.EXTERNAL),
293-
EXTERNAL_MESSAGE_DELETE(UserRightGroup.EXTERNAL, UserRight._EXTERNAL_MESSAGE_VIEW),
297+
EXTERNAL_MESSAGE_DOCTOR_DECLARATION_PROCESS(UserRightGroup.EXTERNAL, UserRight._EXTERNAL_MESSAGE_ACCESS, UserRight._EXTERNAL_MESSAGE_DOCTOR_DECLARATION_VIEW,
298+
UserRight._SAMPLE_CREATE, UserRight._SAMPLE_EDIT, UserRight._PATHOGEN_TEST_CREATE, UserRight._PATHOGEN_TEST_EDIT, UserRight._PATHOGEN_TEST_DELETE,
299+
UserRight._IMMUNIZATION_CREATE, UserRight._IMMUNIZATION_EDIT, UserRight._IMMUNIZATION_DELETE),
300+
301+
EXTERNAL_MESSAGE_LABORATORY_DELETE(UserRightGroup.EXTERNAL, UserRight._EXTERNAL_MESSAGE_ACCESS, UserRight._EXTERNAL_MESSAGE_LABORATORY_VIEW),
302+
EXTERNAL_MESSAGE_DOCTOR_DECLARATION_DELETE(UserRightGroup.EXTERNAL, UserRight._EXTERNAL_MESSAGE_ACCESS, UserRight._EXTERNAL_MESSAGE_DOCTOR_DECLARATION_VIEW),
294303

295304
SURVEY_VIEW(UserRightGroup.SURVEY),
296305
SURVEY_CREATE(UserRightGroup.SURVEY, UserRight._SURVEY_VIEW),
@@ -489,10 +498,14 @@ public enum UserRight {
489498
public static final String _SORMAS_TO_SORMAS_PROCESS = "SORMAS_TO_SORMAS_PROCESS";
490499
public static final String _EXTERNAL_SURVEILLANCE_SHARE = "EXTERNAL_SURVEILLANCE_SHARE";
491500
public static final String _EXTERNAL_SURVEILLANCE_DELETE = "EXTERNAL_SURVEILLANCE_DELETE";
492-
public static final String _EXTERNAL_MESSAGE_VIEW = "EXTERNAL_MESSAGE_VIEW";
493-
public static final String _EXTERNAL_MESSAGE_PROCESS = "EXTERNAL_MESSAGE_PROCESS";
494501
public static final String _EXTERNAL_MESSAGE_PUSH = "EXTERNAL_MESSAGE_PUSH";
495-
public static final String _EXTERNAL_MESSAGE_DELETE = "EXTERNAL_MESSAGE_DELETE";
502+
public static final String _EXTERNAL_MESSAGE_ACCESS = "EXTERNAL_MESSAGE_ACCESS";
503+
public static final String _EXTERNAL_MESSAGE_LABORATORY_VIEW = "EXTERNAL_MESSAGE_LABORATORY_VIEW";
504+
public static final String _EXTERNAL_MESSAGE_LABORATORY_PROCESS = "EXTERNAL_MESSAGE_LABORATORY_PROCESS";
505+
public static final String _EXTERNAL_MESSAGE_LABORATORY_DELETE = "EXTERNAL_MESSAGE_LABORATORY_DELETE";
506+
public static final String _EXTERNAL_MESSAGE_DOCTOR_DECLARATION_VIEW = "EXTERNAL_MESSAGE_DOCTOR_DECLARATION_VIEW";
507+
public static final String _EXTERNAL_MESSAGE_DOCTOR_DECLARATION_PROCESS = "EXTERNAL_MESSAGE_DOCTOR_DECLARATION_PROCESS";
508+
public static final String _EXTERNAL_MESSAGE_DOCTOR_DECLARATION_DELETE = "EXTERNAL_MESSAGE_DOCTOR_DECLARATION_DELETE";
496509
public static final String _TRAVEL_ENTRY_MANAGEMENT_ACCESS = "TRAVEL_ENTRY_MANAGEMENT_ACCESS";
497510
public static final String _TRAVEL_ENTRY_VIEW = "TRAVEL_ENTRY_VIEW";
498511
public static final String _TRAVEL_ENTRY_VIEW_ARCHIVED = "TRAVEL_ENTRY_VIEW_ARCHIVED";

sormas-api/src/main/resources/enum.properties

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1558,10 +1558,14 @@ UserRight.SORMAS_TO_SORMAS_SHARE = Share data from one SORMAS instance to anothe
15581558
UserRight.SORMAS_TO_SORMAS_PROCESS = Process shares
15591559
UserRight.EXTERNAL_SURVEILLANCE_SHARE = Send data to external surveillance tool
15601560
UserRight.EXTERNAL_SURVEILLANCE_DELETE = Delete data in external surveillance tool
1561-
UserRight.EXTERNAL_MESSAGE_VIEW = View and fetch messages
1562-
UserRight.EXTERNAL_MESSAGE_PROCESS = Work with messages
15631561
UserRight.EXTERNAL_MESSAGE_PUSH = Push external messages to the system
1564-
UserRight.EXTERNAL_MESSAGE_DELETE = Delete messages from the system
1562+
UserRight.EXTERNAL_MESSAGE_ACCESS = Access external messages
1563+
UserRight.EXTERNAL_MESSAGE_LABORATORY_VIEW = View laboratory messages
1564+
UserRight.EXTERNAL_MESSAGE_DOCTOR_DECLARATION_VIEW = View doctor declaration messages
1565+
UserRight.EXTERNAL_MESSAGE_LABORATORY_PROCESS = Work with laboratory messages
1566+
UserRight.EXTERNAL_MESSAGE_DOCTOR_DECLARATION_PROCESS = Work with doctor declaration messages
1567+
UserRight.EXTERNAL_MESSAGE_LABORATORY_DELETE = Delete laboratory messages from the system
1568+
UserRight.EXTERNAL_MESSAGE_DOCTOR_DECLARATION_DELETE = Delete doctor declaration messages from the system
15651569
UserRight.CASE_SHARE = Share cases with the whole country
15661570
UserRight.IMMUNIZATION_VIEW = View existing immunizations and vaccinations
15671571
UserRight.IMMUNIZATION_VIEW_ARCHIVED = View archived immunizations and vaccinations
@@ -1793,10 +1797,14 @@ UserRight.Desc.SORMAS_TO_SORMAS_SHARE = Users with this right can initiate a sha
17931797
UserRight.Desc.SORMAS_TO_SORMAS_PROCESS = Only users with this right are allowed to see & use the share directory.
17941798
UserRight.Desc.EXTERNAL_SURVEILLANCE_SHARE = Allows sharing cases or events to external surveillance tools. In order to do so the related edit user right is needed as-well.
17951799
UserRight.Desc.EXTERNAL_SURVEILLANCE_DELETE = Allows deleting cases or events in external surveillance tools. In order to do so the related edit user right is needed as-well.
1796-
UserRight.Desc.EXTERNAL_MESSAGE_VIEW = Able to view and fetch messages
1797-
UserRight.Desc.EXTERNAL_MESSAGE_PROCESS = Able to work with messages
17981800
UserRight.Desc.EXTERNAL_MESSAGE_PUSH = Able to push external messages to the system
1799-
UserRight.Desc.EXTERNAL_MESSAGE_DELETE = Able to delete messages
1801+
UserRight.Desc.EXTERNAL_MESSAGE_ACCESS = Able to access external messages
1802+
UserRight.Desc.EXTERNAL_MESSAGE_LABORATORY_VIEW = Able to view laboratory messages
1803+
UserRight.Desc.EXTERNAL_MESSAGE_DOCTOR_DECLARATION_VIEW = Able to view doctor declaration messages
1804+
UserRight.Desc.EXTERNAL_MESSAGE_LABORATORY_PROCESS = Able to work with laboratory messages
1805+
UserRight.Desc.EXTERNAL_MESSAGE_DOCTOR_DECLARATION_PROCESS = Able to process doctor declaration messages
1806+
UserRight.Desc.EXTERNAL_MESSAGE_LABORATORY_DELETE = Able to delete laboratory messages
1807+
UserRight.Desc.EXTERNAL_MESSAGE_DOCTOR_DECLARATION_DELETE = Able to delete doctor declaration messages
18001808
UserRight.Desc.CASE_SHARE = Able to share cases with the whole country
18011809
UserRight.Desc.IMMUNIZATION_VIEW = Able to view existing immunizations and vaccinations
18021810
UserRight.Desc.IMMUNIZATION_VIEW_ARCHIVED = Able to view arhived immunizations and vaccinations

sormas-backend/src/main/java/de/symeda/sormas/backend/externalmessage/ExternalMessageFacadeEjb.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,10 @@
104104
import de.symeda.sormas.backend.util.RightsAllowed;
105105

106106
@Stateless(name = "ExternalMessageFacade")
107-
@RightsAllowed(UserRight._EXTERNAL_MESSAGE_VIEW)
107+
@RightsAllowed({
108+
UserRight._EXTERNAL_MESSAGE_ACCESS,
109+
UserRight._EXTERNAL_MESSAGE_LABORATORY_VIEW,
110+
UserRight._EXTERNAL_MESSAGE_DOCTOR_DECLARATION_VIEW })
108111
public class ExternalMessageFacadeEjb implements ExternalMessageFacade {
109112

110113
private final Logger logger = LoggerFactory.getLogger(getClass());
@@ -417,13 +420,17 @@ public ExternalMessageDto getByUuid(String uuid) {
417420
}
418421

419422
@Override
420-
@RightsAllowed(UserRight._EXTERNAL_MESSAGE_DELETE)
423+
@RightsAllowed({
424+
UserRight._EXTERNAL_MESSAGE_LABORATORY_DELETE,
425+
UserRight._EXTERNAL_MESSAGE_DOCTOR_DECLARATION_DELETE })
421426
public void delete(String uuid) {
422427
externalMessageService.deletePermanent(externalMessageService.getByUuid(uuid));
423428
}
424429

425430
@Override
426-
@RightsAllowed(UserRight._EXTERNAL_MESSAGE_DELETE)
431+
@RightsAllowed({
432+
UserRight._EXTERNAL_MESSAGE_LABORATORY_DELETE,
433+
UserRight._EXTERNAL_MESSAGE_DOCTOR_DECLARATION_DELETE })
427434
public List<ProcessedEntity> delete(List<String> uuids) {
428435
List<ProcessedEntity> processedExternalMessages = new ArrayList<>();
429436
List<ExternalMessage> externalMessagesToBeDeleted = externalMessageService.getByUuids(uuids);
@@ -645,7 +652,9 @@ public Page<ExternalMessageIndexDto> getIndexPage(
645652
@Override
646653
@RightsAllowed({
647654
UserRight._SYSTEM,
648-
UserRight._EXTERNAL_MESSAGE_VIEW })
655+
UserRight._EXTERNAL_MESSAGE_ACCESS,
656+
UserRight._EXTERNAL_MESSAGE_LABORATORY_VIEW,
657+
UserRight._EXTERNAL_MESSAGE_DOCTOR_DECLARATION_VIEW })
649658
public ExternalMessageFetchResult fetchAndSaveExternalMessages(Date since) {
650659

651660
SystemEventDto currentSync = syncFacadeEjb.startSyncFor(SystemEventType.FETCH_EXTERNAL_MESSAGES);

sormas-backend/src/main/java/de/symeda/sormas/backend/externalmessage/ExternalMessageIndexDtoResultTransformer.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.hibernate.transform.ResultTransformer;
2222

2323
import de.symeda.sormas.api.Disease;
24-
import de.symeda.sormas.api.disease.DiseaseVariant;
2524
import de.symeda.sormas.api.externalmessage.ExternalMessageIndexDto;
2625
import de.symeda.sormas.api.externalmessage.ExternalMessageStatus;
2726
import de.symeda.sormas.api.externalmessage.ExternalMessageType;

sormas-backend/src/main/java/de/symeda/sormas/backend/externalmessage/ExternalMessageService.java

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package de.symeda.sormas.backend.externalmessage;
22

3+
import java.util.ArrayList;
34
import java.util.Calendar;
45
import java.util.Collections;
56
import java.util.List;
@@ -23,7 +24,9 @@
2324
import de.symeda.sormas.api.ReferenceDto;
2425
import de.symeda.sormas.api.caze.surveillancereport.SurveillanceReportReferenceDto;
2526
import de.symeda.sormas.api.externalmessage.ExternalMessageCriteria;
27+
import de.symeda.sormas.api.externalmessage.ExternalMessageType;
2628
import de.symeda.sormas.api.sample.SampleReferenceDto;
29+
import de.symeda.sormas.api.user.UserRight;
2730
import de.symeda.sormas.api.utils.DataHelper;
2831
import de.symeda.sormas.backend.ExtendedPostgreSQL94Dialect;
2932
import de.symeda.sormas.backend.caze.Case;
@@ -37,6 +40,7 @@
3740
import de.symeda.sormas.backend.externalmessage.labmessage.SampleReportService;
3841
import de.symeda.sormas.backend.sample.Sample;
3942
import de.symeda.sormas.backend.user.User;
43+
import de.symeda.sormas.backend.user.UserService;
4044

4145
@Stateless
4246
@LocalBean
@@ -45,6 +49,9 @@ public class ExternalMessageService extends AdoServiceWithUserFilterAndJurisdict
4549
@EJB
4650
private SampleReportService sampleReportService;
4751

52+
@EJB
53+
private UserService userService;
54+
4855
public ExternalMessageService() {
4956
super(ExternalMessage.class);
5057
}
@@ -67,17 +74,46 @@ public Predicate createUserFilter(CriteriaBuilder cb, CriteriaQuery cq, From<?,
6774
}
6875

6976
/**
70-
* Creates a default filter that should be used as the basis of queries.
71-
* This essentially removes external messages linked to {@link DeletableAdo#isDeleted()} case/contact/event participants from the
72-
* queries.
77+
* Creates a default {@link Predicate} to be used as the basis for queries on {@link ExternalMessage}.
78+
* <p>
79+
* This filter excludes external messages that are linked to deleted cases or samples by checking the {@code deleted} flag
80+
* on associated {@link Case} and {@link Sample} entities. Additionally, it restricts the result to only include messages
81+
* of types that the current user is allowed to view, based on their {@link UserRight}s (e.g., laboratory or doctor declaration).
82+
* <p>
83+
* If the user does not have permission to view any message types, the filter will always evaluate to {@code false}
84+
* (i.e., return no results).
85+
*
86+
* @param cb
87+
* the {@link CriteriaBuilder} used to construct the predicate
88+
* @param root
89+
* the root entity in the criteria query
90+
* @return a predicate representing the default filter for external messages
7391
*/
7492
public Predicate createDefaultFilter(CriteriaBuilder cb, From<?, ExternalMessage> root) {
7593
Path<Boolean> sampleDeleted =
7694
root.join(ExternalMessage.SAMPLE_REPORTS, JoinType.LEFT).join(SampleReport.SAMPLE, JoinType.LEFT).get(Sample.DELETED);
7795
Path<Boolean> caseDeleted =
7896
root.join(ExternalMessage.SURVEILLANCE_REPORT, JoinType.LEFT).join(SurveillanceReport.CAZE, JoinType.LEFT).get(Case.DELETED);
7997

80-
return cb.and(cb.or(cb.isNull(sampleDeleted), cb.isFalse(sampleDeleted)), cb.or(cb.isNull(caseDeleted), cb.isFalse(caseDeleted)));
98+
Predicate deletedFilter =
99+
cb.and(cb.or(cb.isNull(sampleDeleted), cb.isFalse(sampleDeleted)), cb.or(cb.isNull(caseDeleted), cb.isFalse(caseDeleted)));
100+
101+
ArrayList<ExternalMessageType> messageTypes = new ArrayList<>();
102+
103+
if (userService.hasRight(UserRight.EXTERNAL_MESSAGE_LABORATORY_VIEW)) {
104+
messageTypes.add(ExternalMessageType.LAB_MESSAGE);
105+
}
106+
107+
if (userService.hasRight(UserRight.EXTERNAL_MESSAGE_DOCTOR_DECLARATION_VIEW)) {
108+
messageTypes.add(ExternalMessageType.PHYSICIANS_REPORT);
109+
}
110+
111+
if (messageTypes.isEmpty()) {
112+
return cb.disjunction();
113+
}
114+
115+
Predicate typeInFilter = root.get(ExternalMessage.TYPE).in(messageTypes);
116+
return cb.and(deletedFilter, typeInFilter);
81117
}
82118

83119
public Predicate buildCriteriaFilter(CriteriaBuilder cb, Root<ExternalMessage> labMessage, ExternalMessageCriteria criteria) {

sormas-backend/src/main/java/de/symeda/sormas/backend/externalmessage/labmessage/SampleReportFacadeEjb.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,17 @@
1515

1616
package de.symeda.sormas.backend.externalmessage.labmessage;
1717

18+
import static java.util.stream.Collectors.toList;
19+
20+
import java.util.ArrayList;
21+
import java.util.List;
22+
23+
import javax.ejb.EJB;
24+
import javax.ejb.LocalBean;
25+
import javax.ejb.Stateless;
26+
import javax.validation.Valid;
27+
import javax.validation.constraints.NotNull;
28+
1829
import de.symeda.sormas.api.externalmessage.labmessage.SampleReportDto;
1930
import de.symeda.sormas.api.externalmessage.labmessage.SampleReportFacade;
2031
import de.symeda.sormas.api.externalmessage.labmessage.SampleReportReferenceDto;
@@ -27,19 +38,10 @@
2738
import de.symeda.sormas.backend.util.DtoHelper;
2839
import de.symeda.sormas.backend.util.RightsAllowed;
2940

30-
import javax.ejb.EJB;
31-
import javax.ejb.LocalBean;
32-
import javax.ejb.Stateless;
33-
import javax.validation.Valid;
34-
import javax.validation.constraints.NotNull;
35-
36-
import java.util.ArrayList;
37-
import java.util.List;
38-
39-
import static java.util.stream.Collectors.toList;
40-
4141
@Stateless(name = "SampleReportFacade")
42-
@RightsAllowed(UserRight._EXTERNAL_MESSAGE_PROCESS)
42+
@RightsAllowed({
43+
UserRight._EXTERNAL_MESSAGE_LABORATORY_PROCESS,
44+
UserRight._EXTERNAL_MESSAGE_DOCTOR_DECLARATION_PROCESS })
4345
public class SampleReportFacadeEjb implements SampleReportFacade {
4446

4547
@EJB

sormas-backend/src/main/java/de/symeda/sormas/backend/externalmessage/labmessage/TestReportFacadeEjb.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@
3030
import de.symeda.sormas.backend.util.RightsAllowed;
3131

3232
@Stateless(name = "TestReportFacade")
33-
@RightsAllowed(UserRight._EXTERNAL_MESSAGE_PROCESS)
33+
@RightsAllowed({
34+
UserRight._EXTERNAL_MESSAGE_LABORATORY_PROCESS,
35+
UserRight._EXTERNAL_MESSAGE_DOCTOR_DECLARATION_PROCESS })
3436
public class TestReportFacadeEjb implements TestReportFacade {
3537

3638
@EJB

sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/entities/externalmessage/SormasToSormasExternalMessageFacadeEjb.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public class SormasToSormasExternalMessageFacadeEjb implements SormasToSormasExt
7878
@Override
7979
@RightsAllowed(UserRight._SORMAS_TO_SORMAS_SHARE)
8080
public void sendExternalMessages(List<String> uuids, @Valid SormasToSormasOptionsDto options) throws SormasToSormasException {
81-
if (!userService.hasRight(UserRight.EXTERNAL_MESSAGE_PROCESS)) {
81+
if (!(userService.hasRight(UserRight.EXTERNAL_MESSAGE_LABORATORY_PROCESS) || userService.hasRight(UserRight.EXTERNAL_MESSAGE_DOCTOR_DECLARATION_PROCESS))) {
8282
throw new AccessDeniedException(I18nProperties.getString(Strings.errorForbidden));
8383
}
8484

sormas-backend/src/main/resources/META-INF/glassfish-ejb-jar.xml

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -858,23 +858,43 @@
858858
</security-role-mapping>
859859

860860
<security-role-mapping>
861-
<role-name>EXTERNAL_MESSAGE_VIEW</role-name>
862-
<group-name>EXTERNAL_MESSAGE_VIEW</group-name>
861+
<role-name>EXTERNAL_MESSAGE_PUSH</role-name>
862+
<group-name>EXTERNAL_MESSAGE_PUSH</group-name>
863863
</security-role-mapping>
864864

865865
<security-role-mapping>
866-
<role-name>EXTERNAL_MESSAGE_PROCESS</role-name>
867-
<group-name>EXTERNAL_MESSAGE_PROCESS</group-name>
866+
<role-name>EXTERNAL_MESSAGE_ACCESS</role-name>
867+
<group-name>EXTERNAL_MESSAGE_ACCESS</group-name>
868868
</security-role-mapping>
869869

870870
<security-role-mapping>
871-
<role-name>EXTERNAL_MESSAGE_PUSH</role-name>
872-
<group-name>EXTERNAL_MESSAGE_PUSH</group-name>
871+
<role-name>EXTERNAL_MESSAGE_LABORATORY_VIEW</role-name>
872+
<group-name>EXTERNAL_MESSAGE_LABORATORY_VIEW</group-name>
873+
</security-role-mapping>
874+
875+
<security-role-mapping>
876+
<role-name>EXTERNAL_MESSAGE_DOCTOR_DECLARATION_VIEW</role-name>
877+
<group-name>EXTERNAL_MESSAGE_DOCTOR_DECLARATION_VIEW</group-name>
878+
</security-role-mapping>
879+
880+
<security-role-mapping>
881+
<role-name>EXTERNAL_MESSAGE_LABORATORY_PROCESS</role-name>
882+
<group-name>EXTERNAL_MESSAGE_LABORATORY_PROCESS</group-name>
883+
</security-role-mapping>
884+
885+
<security-role-mapping>
886+
<role-name>EXTERNAL_MESSAGE_DOCTOR_DECLARATION_PROCESS</role-name>
887+
<group-name>EXTERNAL_MESSAGE_DOCTOR_DECLARATION_PROCESS</group-name>
888+
</security-role-mapping>
889+
890+
<security-role-mapping>
891+
<role-name>EXTERNAL_MESSAGE_LABORATORY_DELETE</role-name>
892+
<group-name>EXTERNAL_MESSAGE_LABORATORY_DELETE</group-name>
873893
</security-role-mapping>
874894

875895
<security-role-mapping>
876-
<role-name>EXTERNAL_MESSAGE_DELETE</role-name>
877-
<group-name>EXTERNAL_MESSAGE_DELETE</group-name>
896+
<role-name>EXTERNAL_MESSAGE_DOCTOR_DECLARATION_DELETE</role-name>
897+
<group-name>EXTERNAL_MESSAGE_DOCTOR_DECLARATION_DELETE</group-name>
878898
</security-role-mapping>
879899

880900
<security-role-mapping>

0 commit comments

Comments
 (0)