READ、PAY、CANCELED、DELETE
READ、PAY、CANCELED(有限)、DELETE(有限)
READ、CANCELED、DELETE
return switch (permission) {
case "READ" -> isOwner || isAdmin;
case "PAY" -> isOwner;
case "REFUND" -> isAdmin;
case "DELETE", "CANCELED" -> isAdmin || (isOwner && order.getStatus() == Order.STATUS.UNPAID);
default -> false;
};
@Component
public class OrderPermissionChecker implements DomainPermissionChecker {
private final OrderDao orderDao;
@Autowired
public OrderPermissionChecker(OrderDao orderDao){
this.orderDao = orderDao;
}
public String getTargetType(){return "ORDER";}
@Override
public boolean hasPermission(User user, Object targetDomainObject, String permission){
if (!(targetDomainObject instanceof Order order)) return false;
return checker(user, permission, order);
}
@Override
public boolean hasPermission(User user, Serializable targetId, String permission){
Order order = orderDao.findById(targetId.toString()).orElseThrow(() -> ResourcesException.of(ErrorCode.ORDER_NOT_FOUND));
return checker(user, permission, order);
}
private boolean checker(User user, String permission, Order order){
boolean isOwner = user.getId().equals(order.getUser().getId());
boolean isAdmin = user.getRole().getId().equals(RoleID.ADMIN.getID());
return switch (permission) {
case "READ" -> isOwner || isAdmin;
case "PAY" -> isOwner;
case "REFUND" -> isAdmin;
case "DELETE", "CANCELED" -> isAdmin || (isOwner && order.getStatus() == Order.STATUS.UNPAID);
default -> false;
};
}
}
本篇文章出自《每天學Java直到今年結束》Day239,大家可以到我的網站上查看~