From c573eb2fb37d651d03b18f8807b0d67df44d3d86 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Fri, 26 May 2023 07:42:31 +0700 Subject: [PATCH] edit access menu --- .../controller/PermissionController.java | 29 ++++++ .../model/request/ListPermissionRequest.java | 20 ++++ .../model/request/PermissionRequest.java | 23 +++++ .../smartproc/repository/MenusRepository.java | 3 + .../repository/PermissionRepository.java | 3 + .../PutUpdatePermissionService.java | 91 +++++++++++++++++++ 6 files changed, 169 insertions(+) create mode 100644 src/main/java/com/iconplus/smartproc/controller/PermissionController.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/ListPermissionRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/PermissionRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/service/permission/PutUpdatePermissionService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/PermissionController.java b/src/main/java/com/iconplus/smartproc/controller/PermissionController.java new file mode 100644 index 0000000..caca5b5 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/PermissionController.java @@ -0,0 +1,29 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.ListPermissionRequest; +import com.iconplus.smartproc.repository.PermissionRepository; +import com.iconplus.smartproc.service.permission.PutUpdatePermissionService; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") +@RestController +@RequestMapping("/api/permission") +public class PermissionController { + + private PermissionRepository permissionRepository; + private PutUpdatePermissionService putUpdatePermissionService; + + public PermissionController(PermissionRepository permissionRepository, + PutUpdatePermissionService putUpdatePermissionService) { + this.permissionRepository = permissionRepository; + this.putUpdatePermissionService = putUpdatePermissionService; + } + + @PutMapping("/{roleId}") + public EmptyResponse editPermissionRole(@PathVariable Long roleId, @RequestBody ListPermissionRequest listPermissionRequest) { + listPermissionRequest.setRoleId(roleId); + return putUpdatePermissionService.execute(listPermissionRequest); + } + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/ListPermissionRequest.java b/src/main/java/com/iconplus/smartproc/model/request/ListPermissionRequest.java new file mode 100644 index 0000000..4696f29 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/ListPermissionRequest.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ListPermissionRequest extends BaseRequest { + + private Long roleId; + private List data; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/PermissionRequest.java b/src/main/java/com/iconplus/smartproc/model/request/PermissionRequest.java new file mode 100644 index 0000000..909d4c6 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/PermissionRequest.java @@ -0,0 +1,23 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class PermissionRequest extends BaseRequest { + 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/repository/MenusRepository.java b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java index 4b58eb4..6e50213 100644 --- a/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java @@ -5,9 +5,12 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; @Repository public interface MenusRepository extends JpaRepository { List findByIsDeleteFalse(); + Optional findByIdAndIsDeleteFalse(Long id); + } diff --git a/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java b/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java index 2c2d860..68813b4 100644 --- a/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java @@ -7,6 +7,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; @Repository public interface PermissionRepository extends JpaRepository { @@ -25,4 +26,6 @@ public interface PermissionRepository extends JpaRepository { "AND m.isDelete = false " + "AND p.roleId = :roleId") List getAllPermissionsByRoleId(Long roleId); + + Optional findByRoleIdAndMenuIdAndIsDeleteFalse(Long roleId, Long menuId); } diff --git a/src/main/java/com/iconplus/smartproc/service/permission/PutUpdatePermissionService.java b/src/main/java/com/iconplus/smartproc/service/permission/PutUpdatePermissionService.java new file mode 100644 index 0000000..c78458c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/permission/PutUpdatePermissionService.java @@ -0,0 +1,91 @@ +package com.iconplus.smartproc.service.permission; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +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.ListPermissionRequest; +import com.iconplus.smartproc.model.request.PermissionRequest; +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.http.HttpStatus; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; +import java.util.ArrayList; +import java.util.List; + +@Service +public class PutUpdatePermissionService implements BaseService { + + private PermissionRepository permissionRepository; + private MenusRepository menusRepository; + private RolesRepository rolesRepository; + public PutUpdatePermissionService(PermissionRepository permissionRepository, + MenusRepository menusRepository, + RolesRepository rolesRepository) { + this.permissionRepository = permissionRepository; + this.menusRepository = menusRepository; + this.rolesRepository = rolesRepository; + } + + @Transactional + @Override + public EmptyResponse execute(ListPermissionRequest input) { + + Roles role = rolesRepository.findByIdAndIsDeleteFalse(input.getRoleId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10005, + Constants.ERR_TTL_10005, + String.format(Constants.ERR_MSG_10005, input.getRoleId()))); + + List permissionList = new ArrayList<>(); + + for (PermissionRequest permissionRequest : input.getData()) { + Permission permission = getPermission(permissionRequest, role); + permissionList.add(permission); + } + + permissionRepository.saveAll(permissionList); + + return new EmptyResponse(); + } + + public Menus findMenuById(Long menuId) { + var menus = menusRepository.findByIdAndIsDeleteFalse(menuId); + if (menus.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + "err", + "err", + "err"); + } + return menus.get(); + } + + private Permission getPermission(PermissionRequest permissionRequest, Roles roles) { + var permission = permissionRepository.findByRoleIdAndMenuIdAndIsDeleteFalse(roles.getId(), permissionRequest.getMenuId()); + if (permission.isPresent()) { + permission.get().setCanView(permissionRequest.getCanView()); + permission.get().setCanRead(permissionRequest.getCanRead()); + permission.get().setCanCreate(permissionRequest.getCanCreate()); + permission.get().setCanUpdate(permissionRequest.getCanUpdate()); + permission.get().setCanDelete(permissionRequest.getCanDelete()); + return permission.get(); + } else { + return Permission.builder() + .roleId(roles.getId()) + .menuId(permissionRequest.getMenuId()) + .canView(permissionRequest.getCanView()) + .canRead(permissionRequest.getCanRead()) + .canCreate(permissionRequest.getCanCreate()) + .canUpdate(permissionRequest.getCanUpdate()) + .canDelete(permissionRequest.getCanDelete()) + .isDelete(false) + .build(); + } + } + +}