From 69a4f5221944b357179067232b8953cce9496af3 Mon Sep 17 00:00:00 2001 From: Daniel Koch Date: Fri, 29 Jan 2021 16:36:48 +0100 Subject: [PATCH] Add findFor(user/group) methods --- .../GroupClassPermissionRepository.java | 4 ++++ .../GroupInstancePermissionRepository.java | 4 ++++ .../UserClassPermissionRepository.java | 6 ++++- .../UserInstancePermissionRepository.java | 5 ++++- .../GroupClassPermissionService.java | 17 ++++++++++++-- .../GroupInstancePermissionService.java | 21 ++++++++++++++---- .../UserClassPermissionService.java | 22 +++++++++++++++---- .../UserInstancePermissionService.java | 15 ++++++++++++- 8 files changed, 81 insertions(+), 13 deletions(-) diff --git a/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/GroupClassPermissionRepository.java b/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/GroupClassPermissionRepository.java index 2f1f70857..8177619fb 100644 --- a/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/GroupClassPermissionRepository.java +++ b/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/GroupClassPermissionRepository.java @@ -1,7 +1,9 @@ package de.terrestris.shogun.lib.repository.security.permission; +import de.terrestris.shogun.lib.model.Group; import de.terrestris.shogun.lib.model.security.permission.GroupClassPermission; import de.terrestris.shogun.lib.repository.BaseCrudRepository; +import java.util.List; import java.util.Optional; import javax.persistence.QueryHint; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; @@ -16,4 +18,6 @@ public interface GroupClassPermissionRepository extends BaseCrudRepository findByGroupIdAndClassName(Long groupId, String className); + @QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true")) + List findAllByGroup(Group group); } diff --git a/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/GroupInstancePermissionRepository.java b/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/GroupInstancePermissionRepository.java index 6a6be0616..9eeb3602c 100644 --- a/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/GroupInstancePermissionRepository.java +++ b/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/GroupInstancePermissionRepository.java @@ -1,5 +1,6 @@ package de.terrestris.shogun.lib.repository.security.permission; +import de.terrestris.shogun.lib.model.Group; import de.terrestris.shogun.lib.model.security.permission.GroupInstancePermission; import de.terrestris.shogun.lib.repository.BaseCrudRepository; import java.util.List; @@ -20,4 +21,7 @@ public interface GroupInstancePermissionRepository extends BaseCrudRepository findByEntityId(Long entityId); + @QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true")) + List findAllByGroup(Group group); + } diff --git a/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/UserClassPermissionRepository.java b/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/UserClassPermissionRepository.java index 915227c39..c22039140 100644 --- a/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/UserClassPermissionRepository.java +++ b/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/UserClassPermissionRepository.java @@ -1,7 +1,9 @@ package de.terrestris.shogun.lib.repository.security.permission; +import de.terrestris.shogun.lib.model.User; import de.terrestris.shogun.lib.model.security.permission.UserClassPermission; import de.terrestris.shogun.lib.repository.BaseCrudRepository; +import java.util.List; import java.util.Optional; import javax.persistence.QueryHint; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; @@ -18,8 +20,10 @@ public interface UserClassPermissionRepository extends BaseCrudRepository findByUserIdAndClassName(Long userId, String className); + @QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true")) + List findAllByUser(User user); + @Modifying @Query(value = "DELETE FROM userclasspermissions u WHERE u.user_id=:userId", nativeQuery = true) void deleteAllByUserId(@Param("userId") Long userId); - } diff --git a/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/UserInstancePermissionRepository.java b/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/UserInstancePermissionRepository.java index 933b49079..6373bf9b7 100644 --- a/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/UserInstancePermissionRepository.java +++ b/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/UserInstancePermissionRepository.java @@ -1,7 +1,7 @@ package de.terrestris.shogun.lib.repository.security.permission; import de.terrestris.shogun.lib.enumeration.PermissionCollectionType; -import de.terrestris.shogun.lib.model.BaseEntity; +import de.terrestris.shogun.lib.model.User; import de.terrestris.shogun.lib.model.security.permission.UserInstancePermission; import de.terrestris.shogun.lib.repository.BaseCrudRepository; import java.util.List; @@ -31,6 +31,9 @@ List findByEntityAndPermissionCollectionType( @Param("permissionCollectionType") PermissionCollectionType permissionCollectionType ); + @QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true")) + List findAllByUser(User user); + @Modifying @Query(value = "DELETE FROM userinstancepermissions u WHERE u.user_id=:userId", nativeQuery = true) void deleteAllByUserId(@Param("userId") Long userId); diff --git a/shogun-lib/src/main/java/de/terrestris/shogun/lib/service/security/permission/GroupClassPermissionService.java b/shogun-lib/src/main/java/de/terrestris/shogun/lib/service/security/permission/GroupClassPermissionService.java index 2bd77a00b..dbf2c3cb0 100644 --- a/shogun-lib/src/main/java/de/terrestris/shogun/lib/service/security/permission/GroupClassPermissionService.java +++ b/shogun-lib/src/main/java/de/terrestris/shogun/lib/service/security/permission/GroupClassPermissionService.java @@ -29,8 +29,21 @@ public class GroupClassPermissionService extends BaseService findFor(Group group) { + + LOG.trace("Getting all group class permissions for group with Keycloak ID {}", + group.getKeycloakId()); + + return repository.findAllByGroup(group); + } + + /** + * Find group class permission for class of entity and given group * * @param entity The entity to find the permission for. * @param group The group to find the permission for. diff --git a/shogun-lib/src/main/java/de/terrestris/shogun/lib/service/security/permission/GroupInstancePermissionService.java b/shogun-lib/src/main/java/de/terrestris/shogun/lib/service/security/permission/GroupInstancePermissionService.java index 7c2a17f16..52c7c76fa 100644 --- a/shogun-lib/src/main/java/de/terrestris/shogun/lib/service/security/permission/GroupInstancePermissionService.java +++ b/shogun-lib/src/main/java/de/terrestris/shogun/lib/service/security/permission/GroupInstancePermissionService.java @@ -30,11 +30,24 @@ public class GroupInstancePermissionService extends BaseService findFor(Group group) { + + LOG.trace("Getting all group instance permissions for group with Keycloak ID {}", + group.getKeycloakId()); + + return repository.findAllByGroup(group); + } + + /** + * Get permission for SHOGun group + * @param entity entity to get group permissions for + * @param group The SHOGun group + * @return */ public Optional findFor(BaseEntity entity, Group group) { if (entity == null || group == null) { diff --git a/shogun-lib/src/main/java/de/terrestris/shogun/lib/service/security/permission/UserClassPermissionService.java b/shogun-lib/src/main/java/de/terrestris/shogun/lib/service/security/permission/UserClassPermissionService.java index f0c122bec..e7a0fd3c1 100644 --- a/shogun-lib/src/main/java/de/terrestris/shogun/lib/service/security/permission/UserClassPermissionService.java +++ b/shogun-lib/src/main/java/de/terrestris/shogun/lib/service/security/permission/UserClassPermissionService.java @@ -9,6 +9,7 @@ import de.terrestris.shogun.lib.repository.security.permission.UserClassPermissionRepository; import de.terrestris.shogun.lib.security.SecurityContextUtil; import de.terrestris.shogun.lib.service.BaseService; +import java.util.List; import java.util.Optional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -23,11 +24,24 @@ public class UserClassPermissionService extends BaseService findFor(User user) { + + LOG.trace("Getting all user class permissions for user with Keycloak ID {}", + user.getKeycloakId()); + + return repository.findAllByUser(user); + } + + /** + * Return {@link Optional} containing {@link UserClassPermission} + * @param clazz The class that should be checked + * @param user The user to check for + * @return {@link Optional} containing {@link UserClassPermission} */ public Optional findFor(Class clazz, User user) { String className = clazz.getCanonicalName(); diff --git a/shogun-lib/src/main/java/de/terrestris/shogun/lib/service/security/permission/UserInstancePermissionService.java b/shogun-lib/src/main/java/de/terrestris/shogun/lib/service/security/permission/UserInstancePermissionService.java index 1474e3439..c3c6af27c 100644 --- a/shogun-lib/src/main/java/de/terrestris/shogun/lib/service/security/permission/UserInstancePermissionService.java +++ b/shogun-lib/src/main/java/de/terrestris/shogun/lib/service/security/permission/UserInstancePermissionService.java @@ -26,7 +26,20 @@ public class UserInstancePermissionService extends BaseService findFor(User user) { + + LOG.trace("Getting all user instance permissions for user {}", user); + + return repository.findAllByUser(user); + } + + /** + * Get {@link UserInstancePermission} for SHOGun user * * @param entity The entity to find the permission for. * @param user The user to find the permission for.