Skip to content

Commit 3ca3b18

Browse files
authored
#7: implemented security rule Y1 (#15)
1 parent 1facefe commit 3ca3b18

File tree

7 files changed

+55
-9
lines changed

7 files changed

+55
-9
lines changed

src/main/java/com/devonfw/sample/archunit/task/logic/UcDeleteTaskItem.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package com.devonfw.sample.archunit.task.logic;
22

3+
import javax.annotation.security.RolesAllowed;
34
import javax.enterprise.context.ApplicationScoped;
45
import javax.inject.Inject;
56
import javax.inject.Named;
67
import javax.transaction.Transactional;
78

9+
import com.devonfw.sample.archunit.task.common.security.ApplicationAccessControlConfig;
810
import org.slf4j.Logger;
911
import org.slf4j.LoggerFactory;
1012

@@ -29,7 +31,7 @@ public class UcDeleteTaskItem extends AbstractUc {
2931
* @param id the {@link com.devonfw.sample.archunit.task.dataaccess.TaskListEntity#getId() primary key} of the
3032
* {@link com.devonfw.sample.archunit.task.dataaccess.TaskListEntity} to delete.
3133
*/
32-
// @RolesAllowed(ApplicationAccessControlConfig.PERMISSION_DELETE_TASK_ITEM)
34+
@RolesAllowed(ApplicationAccessControlConfig.PERMISSION_DELETE_TASK_ITEM)
3335
public void delete(Long id) {
3436

3537
this.taskItemRepository.deleteById(id);
@@ -38,7 +40,7 @@ public void delete(Long id) {
3840
/**
3941
* @param item the {@link TaskItemEto} to delete.
4042
*/
41-
// @RolesAllowed(ApplicationAccessControlConfig.PERMISSION_DELETE_TASK_ITEM)
43+
@RolesAllowed(ApplicationAccessControlConfig.PERMISSION_DELETE_TASK_ITEM)
4244
public void delete(TaskItemEto item) {
4345

4446
Long id = item.getId();

src/main/java/com/devonfw/sample/archunit/task/logic/UcDeleteTaskList.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package com.devonfw.sample.archunit.task.logic;
22

3+
import javax.annotation.security.RolesAllowed;
34
import javax.enterprise.context.ApplicationScoped;
45
import javax.inject.Inject;
56
import javax.inject.Named;
67
import javax.transaction.Transactional;
78

9+
import com.devonfw.sample.archunit.task.common.security.ApplicationAccessControlConfig;
810
import org.slf4j.Logger;
911
import org.slf4j.LoggerFactory;
1012

@@ -29,7 +31,7 @@ public class UcDeleteTaskList extends AbstractUc {
2931
* @param id the {@link com.devonfw.sample.archunit.task.dataaccess.TaskListEntity#getId() primary key} of the
3032
* {@link com.devonfw.sample.archunit.task.dataaccess.TaskListEntity} to delete.
3133
*/
32-
// @RolesAllowed(ApplicationAccessControlConfig.PERMISSION_DELETE_TASK_ITEM)
34+
@RolesAllowed(ApplicationAccessControlConfig.PERMISSION_DELETE_TASK_ITEM)
3335
public void delete(Long id) {
3436

3537
this.taskListRepository.deleteById(id);
@@ -38,7 +40,7 @@ public void delete(Long id) {
3840
/**
3941
* @param list the {@link TaskListEto} to delete.
4042
*/
41-
// @RolesAllowed(ApplicationAccessControlConfig.PERMISSION_DELETE_TASK_ITEM)
43+
@RolesAllowed(ApplicationAccessControlConfig.PERMISSION_DELETE_TASK_ITEM)
4244
public void delete(TaskListEto list) {
4345

4446
Long id = list.getId();

src/main/java/com/devonfw/sample/archunit/task/logic/UcFindTaskItem.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22

33
import java.util.Optional;
44

5+
import javax.annotation.security.RolesAllowed;
56
import javax.enterprise.context.ApplicationScoped;
67
import javax.inject.Inject;
78
import javax.inject.Named;
89
import javax.transaction.Transactional;
910

1011
import com.devonfw.sample.archunit.general.logic.AbstractUc;
1112
import com.devonfw.sample.archunit.task.common.TaskItemEto;
13+
import com.devonfw.sample.archunit.task.common.security.ApplicationAccessControlConfig;
1214
import com.devonfw.sample.archunit.task.dataaccess.TaskItemEntity;
1315
import com.devonfw.sample.archunit.task.dataaccess.TaskItemRepository;
1416

@@ -31,7 +33,7 @@ public class UcFindTaskItem extends AbstractUc {
3133
* @return the {@link TaskItemEto} with the given {@link TaskItemEto#getId() primary key} or {@code null} if not
3234
* found.
3335
*/
34-
// @RolesAllowed(ApplicationAccessControlConfig.PERMISSION_FIND_TASK_ITEM)
36+
@RolesAllowed(ApplicationAccessControlConfig.PERMISSION_FIND_TASK_ITEM)
3537
public TaskItemEto findById(Long itemId) {
3638

3739
Optional<TaskItemEntity> item = this.taskItemRepository.findById(itemId);

src/main/java/com/devonfw/sample/archunit/task/logic/UcFindTaskList.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.Optional;
44

5+
import javax.annotation.security.RolesAllowed;
56
import javax.enterprise.context.ApplicationScoped;
67
import javax.inject.Inject;
78
import javax.inject.Named;
@@ -10,6 +11,7 @@
1011
import com.devonfw.sample.archunit.general.logic.AbstractUc;
1112
import com.devonfw.sample.archunit.task.common.TaskListCto;
1213
import com.devonfw.sample.archunit.task.common.TaskListEto;
14+
import com.devonfw.sample.archunit.task.common.security.ApplicationAccessControlConfig;
1315
import com.devonfw.sample.archunit.task.dataaccess.TaskListEntity;
1416
import com.devonfw.sample.archunit.task.dataaccess.TaskListRepository;
1517

@@ -34,7 +36,7 @@ public class UcFindTaskList extends AbstractUc {
3436
* @param listId the {@link TaskListEntity#getId() primary key} of the {@link TaskListEntity} to find.
3537
* @return the {@link TaskListEto} for the given {@link TaskListEto#getId() primary key} or {@code null} if not found.
3638
*/
37-
// @RolesAllowed(ApplicationAccessControlConfig.PERMISSION_FIND_TASK_LIST)
39+
@RolesAllowed(ApplicationAccessControlConfig.PERMISSION_FIND_TASK_LIST)
3840
public TaskListEto findById(Long listId) {
3941

4042
Optional<TaskListEntity> taskList = this.taskListRepository.findById(listId);
@@ -45,7 +47,7 @@ public TaskListEto findById(Long listId) {
4547
* @param listId the {@link TaskListEntity#getId() primary key} of the {@link TaskListEntity} to find.
4648
* @return the {@link TaskListCto} for the given {@link TaskListEto#getId() primary key} or {@code null} if not found.
4749
*/
48-
// @RolesAllowed(ApplicationAccessControlConfig.PERMISSION_FIND_TASK_LIST)
50+
@RolesAllowed(ApplicationAccessControlConfig.PERMISSION_FIND_TASK_LIST)
4951
public TaskListCto findCtoById(Long listId) {
5052

5153
Optional<TaskListEntity> list = this.taskListRepository.findById(listId);

src/main/java/com/devonfw/sample/archunit/task/logic/UcSaveTaskItem.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package com.devonfw.sample.archunit.task.logic;
22

3+
import javax.annotation.security.RolesAllowed;
34
import javax.enterprise.context.ApplicationScoped;
45
import javax.inject.Inject;
56
import javax.inject.Named;
67
import javax.transaction.Transactional;
78

89
import com.devonfw.sample.archunit.general.logic.AbstractUc;
910
import com.devonfw.sample.archunit.task.common.TaskItemEto;
11+
import com.devonfw.sample.archunit.task.common.security.ApplicationAccessControlConfig;
1012
import com.devonfw.sample.archunit.task.dataaccess.TaskItemEntity;
1113
import com.devonfw.sample.archunit.task.dataaccess.TaskItemRepository;
1214

@@ -28,7 +30,7 @@ public class UcSaveTaskItem extends AbstractUc {
2830
* @param item the {@link TaskItemEto} to save.
2931
* @return the {@link TaskItemEntity#getId() primary key} of the saved {@link TaskItemEntity}.
3032
*/
31-
// @RolesAllowed(ApplicationAccessControlConfig.PERMISSION_SAVE_TASK_ITEM)
33+
@RolesAllowed(ApplicationAccessControlConfig.PERMISSION_SAVE_TASK_ITEM)
3234
public Long save(TaskItemEto item) {
3335

3436
TaskItemEntity entity = this.taskItemMapper.toEntity(item);

src/main/java/com/devonfw/sample/archunit/task/logic/UcSaveTaskList.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package com.devonfw.sample.archunit.task.logic;
22

3+
import javax.annotation.security.RolesAllowed;
34
import javax.enterprise.context.ApplicationScoped;
45
import javax.inject.Inject;
56
import javax.inject.Named;
67
import javax.transaction.Transactional;
78

89
import com.devonfw.sample.archunit.general.logic.AbstractUc;
910
import com.devonfw.sample.archunit.task.common.TaskListEto;
11+
import com.devonfw.sample.archunit.task.common.security.ApplicationAccessControlConfig;
1012
import com.devonfw.sample.archunit.task.dataaccess.TaskListEntity;
1113
import com.devonfw.sample.archunit.task.dataaccess.TaskListRepository;
1214

@@ -28,7 +30,7 @@ public class UcSaveTaskList extends AbstractUc {
2830
* @param list the {@link TaskListEto} to save.
2931
* @return the {@link TaskListEntity#getId() primary key} of the saved {@link TaskListEntity}.
3032
*/
31-
// @RolesAllowed(ApplicationAccessControlConfig.PERMISSION_SAVE_TASK_LIST)
33+
@RolesAllowed(ApplicationAccessControlConfig.PERMISSION_SAVE_TASK_LIST)
3234
public Long save(TaskListEto list) {
3335

3436
TaskListEntity entity = this.taskListMapper.toEntity(list);
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.devonfw.sample.archunit;
2+
3+
import com.tngtech.archunit.core.importer.ImportOption;
4+
import com.tngtech.archunit.junit.AnalyzeClasses;
5+
import com.tngtech.archunit.junit.ArchTest;
6+
import com.tngtech.archunit.lang.ArchRule;
7+
8+
import javax.annotation.security.DenyAll;
9+
import javax.annotation.security.PermitAll;
10+
import javax.annotation.security.RolesAllowed;
11+
12+
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.methods;
13+
14+
/**
15+
* JUnit test that validates the security rules of this application.
16+
*/
17+
@AnalyzeClasses(packages = "com.devonfw.sample.archunit", importOptions = ImportOption.DoNotIncludeTests.class)
18+
public class SecurityTest {
19+
20+
/**
21+
* Checks 'Uc*Impl' classes for public methods.
22+
* Fails if a method is neither annotated with @PermitAll, @RolesAllowed nor @DenyAll.
23+
*/
24+
@ArchTest
25+
private static final ArchRule shouldBeProperlyAnnotated = //
26+
methods()
27+
.that().areDeclaredInClassesThat().haveSimpleNameStartingWith("Uc")
28+
.and().arePublic()
29+
.should().beAnnotatedWith(PermitAll.class)
30+
.orShould().beAnnotatedWith(RolesAllowed.class)
31+
.orShould().beAnnotatedWith(DenyAll.class)
32+
.because("All Use-Case implementation methods must be annotated with a security " +
33+
"constraint from javax.annotation.security");
34+
}

0 commit comments

Comments
 (0)