Skip to content

Commit 95e882e

Browse files
committed
backend permission validation for edeting (Sportleiter)
1 parent 98fc3df commit 95e882e

2 files changed

Lines changed: 73 additions & 2 deletions

File tree

bogenliga/bogenliga-application/src/main/java/de/bogenliga/application/services/v1/vereine/service/VereineService.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,21 @@ public VereineDTO update(@RequestBody final VereineDTO vereineDTO,
133133

134134
if (this.requiresOnePermissionAspect.hasPermission(UserPermission.CAN_MODIFY_STAMMDATEN) || this.requiresOnePermissionAspect.hasPermission(UserPermission.CAN_MODIFY_STAMMDATEN_LIGALEITER)) {
135135
//der User hat allgemeine Schreibrechte - wir machen weiter
136-
} else if (this.requiresOnePermissionAspect.hasSpecificPermissionSportleiter(UserPermission.CAN_MODIFY_MY_VEREIN, vereineDTO.getId())) {
136+
} else if (this.requiresOnePermissionAspect.hasSpecificPermissionSportleiter(
137+
138+
UserPermission.CAN_MODIFY_MY_VEREIN, vereineDTO.getId())) {
137139
// der user modifiziert seinen eigenen Verein und ist Sportleiter
138140
VereinDO temp = vereinComponent.findById(vereineDTO.getId());
139141
// das darf aber aber nur wenn der Verein in der bestehenen Region verbleibt - d.h. diese sich nicht ändert
140-
if (!temp.getRegionId().equals(vereineDTO.getRegionId())) throw new NoPermissionException();
142+
if (!temp.getRegionId().equals(vereineDTO.getRegionId())
143+
|| !temp.getName().equals(vereineDTO.getName())
144+
|| !temp.getDsbIdentifier().equals(vereineDTO.getIdentifier())) {
145+
throw new NoPermissionException();
146+
}
141147
} else throw new NoPermissionException();
142148

149+
150+
143151
final VereinDO newVereinDo = VereineDTOMapper.toDO.apply(vereineDTO);
144152
final long userID = UserProvider.getCurrentUserId(principal);
145153

bogenliga/bogenliga-application/src/test/java/de/bogenliga/application/services/v1/vereine/service/VereineServiceTest.java

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import de.bogenliga.application.common.errorhandling.exception.BusinessException;
66
import de.bogenliga.application.services.v1.vereine.model.VereineDTO;
77
import de.bogenliga.application.springconfiguration.security.permissions.RequiresOnePermissionAspect;
8+
import de.bogenliga.application.springconfiguration.security.types.UserPermission;
89
import org.junit.Before;
910
import org.junit.Rule;
1011
import org.junit.Test;
@@ -247,6 +248,68 @@ public void updateNoPermission() {
247248
.isThrownBy(()-> underTest.update(input, principal));
248249
}
249250

251+
@Test
252+
public void update_sportleiter_darf_editierbare_felder_aendern() throws NoPermissionException {
253+
// prepare test data
254+
final VereineDTO input = getVereineDTO();
255+
input.setWebsite("https://neu.de");
256+
input.setDescription("Neue Beschreibung");
257+
input.setIcon("neuesIcon");
258+
259+
final VereinDO existing = getVereinDO();
260+
final VereinDO updated = getVereinDO();
261+
updated.setWebsite("https://neu.de");
262+
updated.setDescription("Neue Beschreibung");
263+
updated.setIcon("neuesIcon");
264+
265+
// configure mocks
266+
when(requiresOnePermissionAspect.hasPermission(UserPermission.CAN_MODIFY_STAMMDATEN)).thenReturn(false);
267+
when(requiresOnePermissionAspect.hasPermission(UserPermission.CAN_MODIFY_STAMMDATEN_LIGALEITER)).thenReturn(false);
268+
when(requiresOnePermissionAspect.hasSpecificPermissionSportleiter(UserPermission.CAN_MODIFY_MY_VEREIN, VEREIN_ID))
269+
.thenReturn(true);
270+
271+
when(vereinComponent.findById(VEREIN_ID)).thenReturn(existing);
272+
when(vereinComponent.update(any(), anyLong())).thenReturn(updated);
273+
274+
// act
275+
final VereineDTO actual = underTest.update(input, principal);
276+
277+
// assert
278+
assertThat(actual).isNotNull();
279+
verify(vereinComponent).update(vereinDOArgumentCaptor.capture(), anyLong());
280+
281+
final VereinDO updatedVerein = vereinDOArgumentCaptor.getValue();
282+
assertThat(updatedVerein).isNotNull();
283+
assertThat(updatedVerein.getWebsite()).isEqualTo("https://neu.de");
284+
assertThat(updatedVerein.getDescription()).isEqualTo("Neue Beschreibung");
285+
assertThat(updatedVerein.getIcon()).isEqualTo("neuesIcon");
286+
}
287+
288+
@Test
289+
public void update_sportleiter_darf_name_identifier_und_region_nicht_aendern() {
290+
// prepare test data
291+
final VereineDTO input = getVereineDTO();
292+
input.setName("Neuer Vereinsname");
293+
input.setIdentifier("NEU12345");
294+
input.setRegionId(999L);
295+
296+
final VereinDO existing = getVereinDO();
297+
298+
// configure mocks
299+
when(requiresOnePermissionAspect.hasPermission(UserPermission.CAN_MODIFY_STAMMDATEN)).thenReturn(false);
300+
when(requiresOnePermissionAspect.hasPermission(UserPermission.CAN_MODIFY_STAMMDATEN_LIGALEITER)).thenReturn(false);
301+
when(requiresOnePermissionAspect.hasSpecificPermissionSportleiter(UserPermission.CAN_MODIFY_MY_VEREIN, VEREIN_ID))
302+
.thenReturn(true);
303+
304+
when(vereinComponent.findById(VEREIN_ID)).thenReturn(existing);
305+
306+
// assert
307+
assertThatExceptionOfType(NoPermissionException.class)
308+
.isThrownBy(() -> underTest.update(input, principal));
309+
310+
verify(vereinComponent).findById(VEREIN_ID);
311+
}
312+
250313

251314
@Test
252315
public void delete() {

0 commit comments

Comments
 (0)