edit access menu

This commit is contained in:
dirgantarasiahaan
2023-05-26 07:42:31 +07:00
parent 6bc02da741
commit c573eb2fb3
6 changed files with 169 additions and 0 deletions

View File

@ -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);
}
}

View File

@ -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<PermissionRequest> data;
}

View File

@ -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;
}

View File

@ -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<Menus, Long> {
List<Menus> findByIsDeleteFalse();
Optional<Menus> findByIdAndIsDeleteFalse(Long id);
}

View File

@ -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<Permission, Long> {
@ -25,4 +26,6 @@ public interface PermissionRepository extends JpaRepository<Permission, Long> {
"AND m.isDelete = false " +
"AND p.roleId = :roleId")
List<PermissionView> getAllPermissionsByRoleId(Long roleId);
Optional<Permission> findByRoleIdAndMenuIdAndIsDeleteFalse(Long roleId, Long menuId);
}

View File

@ -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<ListPermissionRequest, EmptyResponse> {
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<Permission> 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();
}
}
}