From 6bc02da7410aad3c109f30d7935192315aad5916 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Thu, 25 May 2023 21:58:37 +0700 Subject: [PATCH] add permission logic --- .../smartproc/model/entity/Permission.java | 5 +++ .../model/projection/PermissionView.java | 29 +++++++++++++++ .../model/response/PermissionResponse.java | 24 +++++++++++++ .../model/response/RolesResponse.java | 4 +++ .../smartproc/repository/MenusRepository.java | 13 +++++++ .../repository/PermissionRepository.java | 28 +++++++++++++++ .../service/roles/GetRoleByIdService.java | 27 +++++++++++++- .../service/roles/PostCreateRoleService.java | 35 ++++++++++++++++++- 8 files changed, 163 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/PermissionView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/PermissionResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/repository/MenusRepository.java create mode 100644 src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Permission.java b/src/main/java/com/iconplus/smartproc/model/entity/Permission.java index 46e9df1..01fac6e 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/Permission.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/Permission.java @@ -14,6 +14,7 @@ import javax.persistence.*; @Builder @AllArgsConstructor @NoArgsConstructor +@Entity @Table(name = "permission") public class Permission extends BaseEntity { @@ -32,6 +33,10 @@ public class Permission extends BaseEntity { @Type(type = "org.hibernate.type.NumericBooleanType") private Boolean canView; + @Column(name = "can_create") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean canCreate; + @Column(name = "can_read") @Type(type = "org.hibernate.type.NumericBooleanType") private Boolean canRead; diff --git a/src/main/java/com/iconplus/smartproc/model/projection/PermissionView.java b/src/main/java/com/iconplus/smartproc/model/projection/PermissionView.java new file mode 100644 index 0000000..d9e0462 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/PermissionView.java @@ -0,0 +1,29 @@ +package com.iconplus.smartproc.model.projection; + +public interface PermissionView { + + Long getParentId(); + void setParentId(Long parentId); + + Long getMenuId(); + void setMenuId(Long menuId); + + String getNama(); + void setNama(String nama); + + Boolean getCanView(); + void setCanView(Boolean canView); + + Boolean getCanRead(); + void setCanRead(Boolean canRead); + + Boolean getCanUpdate(); + void setCanUpdate(Boolean canUpdate); + + Boolean getCanDelete(); + void setCanDelete(Boolean canDelete); + + Boolean getCanCreate(); + void setCanCreate(Boolean canCreate); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/PermissionResponse.java b/src/main/java/com/iconplus/smartproc/model/response/PermissionResponse.java new file mode 100644 index 0000000..2a05304 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/PermissionResponse.java @@ -0,0 +1,24 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class PermissionResponse extends BaseResponse { + + private Long id; + private Long parentId; + private Long menuId; + private String menu; + private Boolean canView; + private Boolean canCreate; + private Boolean canRead; + private Boolean canDelete; + private Boolean canUpdate; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/RolesResponse.java b/src/main/java/com/iconplus/smartproc/model/response/RolesResponse.java index 11ece70..158771d 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/RolesResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/RolesResponse.java @@ -6,6 +6,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; + @Data @Builder @AllArgsConstructor @@ -17,5 +19,7 @@ public class RolesResponse extends BaseResponse { private String keterangan; private Boolean isActive; private Boolean isDelete; + private List permission; + } diff --git a/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java new file mode 100644 index 0000000..4b58eb4 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java @@ -0,0 +1,13 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.Menus; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface MenusRepository extends JpaRepository { + + List findByIsDeleteFalse(); +} diff --git a/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java b/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java new file mode 100644 index 0000000..2c2d860 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java @@ -0,0 +1,28 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.Permission; +import com.iconplus.smartproc.model.projection.PermissionView; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface PermissionRepository extends JpaRepository { + + @Query(value = "SELECT m.parentId as parentId, " + + "p.menuId as menuId, " + + "m.nama as nama, " + + "p.canView as canView, " + + "p.canCreate as canCreate, " + + "p.canUpdate as canUpdate, " + + "p.canDelete as canDelete, " + + "p.canRead as canRead " + + "FROM Permission p " + + "JOIN Menus m ON m.id = p.menuId " + + "WHERE p.isDelete = false " + + "AND m.isDelete = false " + + "AND p.roleId = :roleId") + List getAllPermissionsByRoleId(Long roleId); +} diff --git a/src/main/java/com/iconplus/smartproc/service/roles/GetRoleByIdService.java b/src/main/java/com/iconplus/smartproc/service/roles/GetRoleByIdService.java index bc7f7c2..67182b6 100644 --- a/src/main/java/com/iconplus/smartproc/service/roles/GetRoleByIdService.java +++ b/src/main/java/com/iconplus/smartproc/service/roles/GetRoleByIdService.java @@ -3,18 +3,27 @@ package com.iconplus.smartproc.service.roles; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.entity.Roles; +import com.iconplus.smartproc.model.projection.PermissionView; import com.iconplus.smartproc.model.request.RolesRequest; +import com.iconplus.smartproc.model.response.PermissionResponse; import com.iconplus.smartproc.model.response.RolesResponse; +import com.iconplus.smartproc.repository.PermissionRepository; import com.iconplus.smartproc.repository.RolesRepository; import com.iconplus.smartproc.util.Constants; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; + @Service public class GetRoleByIdService implements BaseService { private final RolesRepository rolesRepository; - public GetRoleByIdService(RolesRepository rolesRepository) { + private PermissionRepository permissionRepository; + public GetRoleByIdService(RolesRepository rolesRepository, + PermissionRepository permissionRepository) { this.rolesRepository = rolesRepository; + this.permissionRepository = permissionRepository; } @Override @@ -25,12 +34,28 @@ public class GetRoleByIdService implements BaseService permissionResponses = new ArrayList<>(); + List permissionViews = permissionRepository.getAllPermissionsByRoleId(role.getId()); + for (PermissionView permissionView : permissionViews) { + permissionResponses.add(PermissionResponse.builder() + .parentId(permissionView.getParentId()) + .menuId(permissionView.getMenuId()) + .menu(permissionView.getNama()) + .canView(permissionView.getCanView()) + .canCreate(permissionView.getCanCreate()) + .canRead(permissionView.getCanRead()) + .canUpdate(permissionView.getCanUpdate()) + .canDelete(permissionView.getCanDelete()) + .build()); + } + return RolesResponse.builder() .id(role.getId()) .role(role.getRole()) .keterangan(role.getKeterangan()) .isActive(role.getIsActive()) .isDelete(role.getIsDelete()) + .permission(permissionResponses) .build(); } } diff --git a/src/main/java/com/iconplus/smartproc/service/roles/PostCreateRoleService.java b/src/main/java/com/iconplus/smartproc/service/roles/PostCreateRoleService.java index c571fd5..f09f345 100644 --- a/src/main/java/com/iconplus/smartproc/service/roles/PostCreateRoleService.java +++ b/src/main/java/com/iconplus/smartproc/service/roles/PostCreateRoleService.java @@ -2,23 +2,37 @@ package com.iconplus.smartproc.service.roles; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Menus; +import com.iconplus.smartproc.model.entity.Permission; import com.iconplus.smartproc.model.entity.Roles; import com.iconplus.smartproc.model.request.RolesRequest; import com.iconplus.smartproc.model.response.RolesResponse; +import com.iconplus.smartproc.repository.MenusRepository; +import com.iconplus.smartproc.repository.PermissionRepository; import com.iconplus.smartproc.repository.RolesRepository; import com.iconplus.smartproc.util.Constants; import org.springframework.stereotype.Service; +import javax.transaction.Transactional; +import java.util.ArrayList; +import java.util.List; import java.util.Optional; @Service public class PostCreateRoleService implements BaseService { + private final MenusRepository menusRepository; private final RolesRepository rolesRepository; - public PostCreateRoleService(RolesRepository rolesRepository) { + private final PermissionRepository permissionRepository; + public PostCreateRoleService(RolesRepository rolesRepository, + MenusRepository menusRepository, + PermissionRepository permissionRepository) { this.rolesRepository = rolesRepository; + this.menusRepository = menusRepository; + this.permissionRepository = permissionRepository; } + @Transactional @Override public RolesResponse execute(RolesRequest input) { @@ -37,6 +51,25 @@ public class PostCreateRoleService implements BaseService menusList = menusRepository.findByIsDeleteFalse(); + + List permissions = new ArrayList<>(); + for (Menus menus : menusList) { + permissions.add(Permission.builder() + .roleId(result.getId()) + .menuId(menus.getId()) + .canRead(false) + .canCreate(false) + .canView(false) + .canUpdate(false) + .canDelete(false) + .canDelete(false) + .isDelete(false) + .build()); + } + + permissionRepository.saveAll(permissions); + return RolesResponse.builder() .id(result.getId()) .build();