From 8a7448210eb9500dbc358089d3832cd5a804dc58 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Mon, 29 May 2023 22:00:14 +0700 Subject: [PATCH] fix menus --- .../model/projection/MenusPermissionView.java | 38 ++++++++++++++ .../model/response/LoginResponse.java | 5 +- .../response/MenusPermissionResponse.java | 27 ++++++++++ .../repository/PermissionRepository.java | 19 +++++++ .../service/authentication/LoginService.java | 52 ++++++++++++++++--- 5 files changed, 133 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/MenusPermissionView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/MenusPermissionResponse.java diff --git a/src/main/java/com/iconplus/smartproc/model/projection/MenusPermissionView.java b/src/main/java/com/iconplus/smartproc/model/projection/MenusPermissionView.java new file mode 100644 index 0000000..02a3d7a --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/MenusPermissionView.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.model.projection; + +public interface MenusPermissionView { + + Long getId(); + void setId(Long id); + + String getNama(); + void setNama(String nama); + + Long getParentId(); + void setParentId(Long parentId); + + Long getUrutan(); + void setUrutan(Long urutan); + + String getIcon(); + void setIcon(String icon); + + String getLink(); + void setLink(String link); + + Boolean getCanView(); + void setCanView(Boolean canView); + + Boolean getCanRead(); + void setCanRead(Boolean canRead); + + Boolean getCanCreate(); + void setCanCreate(Boolean canCreate); + + Boolean getCanUpdate(); + void setCanUpdate(Boolean canUpdate); + + Boolean getCanDelete(); + void setCanDelete(Boolean canDelete); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java b/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java index 10c2b58..4fa985c 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java @@ -6,7 +6,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.Set; +import java.util.List; @Data @Builder @@ -14,6 +14,7 @@ import java.util.Set; @NoArgsConstructor public class LoginResponse extends BaseResponse { + private Long userId; private String accessToken; private Integer validity; private String refreshToken; @@ -21,6 +22,6 @@ public class LoginResponse extends BaseResponse { private String email; private Long roleId; private String role; - Set accessMenu; + private List menus; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/MenusPermissionResponse.java b/src/main/java/com/iconplus/smartproc/model/response/MenusPermissionResponse.java new file mode 100644 index 0000000..d378edb --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/MenusPermissionResponse.java @@ -0,0 +1,27 @@ +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 MenusPermissionResponse extends BaseResponse { + + private Long id; + private String nama; + private Long parentId; + private Long urutan; + private String icon; + private String link; + private Boolean canView; + private Boolean canRead; + private Boolean canCreate; + private Boolean canDelete; + private Boolean canUpdate; + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java b/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java index 68813b4..2aa8a42 100644 --- a/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java @@ -1,6 +1,7 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.Permission; +import com.iconplus.smartproc.model.projection.MenusPermissionView; import com.iconplus.smartproc.model.projection.PermissionView; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; @@ -28,4 +29,22 @@ public interface PermissionRepository extends JpaRepository { List getAllPermissionsByRoleId(Long roleId); Optional findByRoleIdAndMenuIdAndIsDeleteFalse(Long roleId, Long menuId); + + @Query(value = "SELECT m.id as id, " + + "m.nama as nama, " + + "m.parentId as parentId, " + + "m.urutan as urutan, " + + "m.icon as icon, " + + "m.link as link, " + + "p.canView as canView, " + + "p.canRead as canRead, " + + "p.canCreate as canCreate, " + + "p.canUpdate as canUpdate, " + + "p.canDelete as canDelete " + + "FROM Permission p " + + "JOIN Menus m ON m.id = p.menuId " + + "WHERE m.isDelete = false " + + "AND p.isDelete = false " + + "AND p.roleId = :roleId") + List getListMenusPermission(Long roleId); } diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java index 3052f47..f24965b 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java @@ -4,13 +4,18 @@ import com.iconplus.smartproc.configuration.JwtTokenUtil; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.entity.TokenManagement; +import com.iconplus.smartproc.model.projection.MenusPermissionView; import com.iconplus.smartproc.model.request.LoginRequest; import com.iconplus.smartproc.model.response.LoginResponse; +import com.iconplus.smartproc.model.response.MenusPermissionResponse; import com.iconplus.smartproc.model.token.TokenContent; +import com.iconplus.smartproc.repository.MenusRepository; +import com.iconplus.smartproc.repository.PermissionRepository; import com.iconplus.smartproc.repository.UsersRepository; import com.iconplus.smartproc.service.CommonService; import com.iconplus.smartproc.util.Constants; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; @@ -18,9 +23,7 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; +import java.util.*; @Service @Slf4j @@ -34,14 +37,19 @@ public class LoginService implements BaseService { private final UsersRepository usersRepository; private final JwtTokenUtil jwtTokenUtil; private final CommonService commonService; - + private final MenusRepository menusRepository; + private final PermissionRepository permissionRepository; public LoginService(UsersRepository userRepository, JwtTokenUtil jwtTokenUtil, - CommonService commonService) { + CommonService commonService, + MenusRepository menusRepository, + PermissionRepository permissionRepository) { this.usersRepository = userRepository; this.jwtTokenUtil = jwtTokenUtil; this.commonService = commonService; + this.menusRepository = menusRepository; + this.permissionRepository = permissionRepository; } @@ -65,6 +73,35 @@ public class LoginService implements BaseService { Constants.ERR_TTL_10004, Constants.ERR_MSG_10004); } + Set accessMenu = new HashSet<>(); + List menusPermissionResponseList = new ArrayList<>(); + var listMenusPermission = permissionRepository.getListMenusPermission(userRoleView.getRoleId()); + for (MenusPermissionView menusPermissionView : listMenusPermission) { + if (BooleanUtils.isTrue(menusPermissionView.getCanView()) || + BooleanUtils.isTrue(menusPermissionView.getCanCreate()) || + BooleanUtils.isTrue(menusPermissionView.getCanUpdate()) || + BooleanUtils.isTrue(menusPermissionView.getCanDelete()) || + BooleanUtils.isTrue(menusPermissionView.getCanRead())) { + accessMenu.add(menusPermissionView.getNama()); + } + + MenusPermissionResponse menusPermissionResponse = MenusPermissionResponse.builder() + .id(menusPermissionView.getId()) + .nama(menusPermissionView.getNama()) + .parentId(menusPermissionView.getParentId()) + .urutan(menusPermissionView.getUrutan()) + .icon(menusPermissionView.getIcon()) + .link(menusPermissionView.getLink()) + .canView(menusPermissionView.getCanView()) + .canRead(menusPermissionView.getCanRead()) + .canCreate(menusPermissionView.getCanCreate()) + .canUpdate(menusPermissionView.getCanUpdate()) + .canDelete(menusPermissionView.getCanDelete()) + .build(); + + menusPermissionResponseList.add(menusPermissionResponse); + + } var tokenContent = TokenContent.builder() .userId(userRoleView.getId()) @@ -78,7 +115,7 @@ public class LoginService implements BaseService { .bidang(userRoleView.getBidang()) .jabatanId(userRoleView.getJabatanId()) .jabatan(userRoleView.getJabatan()) - .accessMenu(new HashSet<>()) + .accessMenu(accessMenu) .build(); Map claims = new HashMap<>(); @@ -104,9 +141,12 @@ public class LoginService implements BaseService { .accessToken(accessToken) .validity(accessTokenExp * 60) .refreshToken(refreshToken) + .userId(userRoleView.getId()) .username(userRoleView.getUsername()) .email(userRoleView.getEmail()) + .roleId(userRoleView.getRoleId()) .role(userRoleView.getRole()) + .menus(menusPermissionResponseList) .build(); } }