Сообщение рефакторинг сервисного метода от 29.04.2015 6:16
Изменено 29.04.2015 6:31 Blazkowicz
В сервисном методе нужно проверить или пользователь обладает необходимыми разрешениями для выполнения бизнес логики
Вот примерный код который сейчас это делает:
void processProduct() {
if (!SecurityUtils.hasRole("PERMISSION_UPDATE_ANY_PRODUCT")) {
if (SecurityUtils.hasRole("PERMISSION_UPDATE_OWN_PRODUCT")) {
if (!product.getAuthor().equals(user)) {
throw new AccessDeniedException("Access denied, you don't have permission to update other's products");
}
} else {
throw new AccessDeniedException("Access denied, you don't have permissions to update products");
}
}
if (product.getParent() != null) {
Long parentProductId = product.getParent().getId();
Product siblingProduct = productDao.findChildProductByName(parentProductId, name);
if (siblingProduct != null) {
if (!siblingProduct.equals(product)) {
throw new ProductAlreadyExistsException("Parent product already contains a child product with a given name");
}
}
}
.....
doSomeRealBusinessLogic();
}
Здесь проверяется или у пользователя есть разрешение — PERMISSION_UPDATE_ANY_PRODUCT и если есть то все ок, если нету то проверяется или есть разрешение PERMISSION_UPDATE_OWN_PRODUCT и если есть то принадлежит ли Продукт пользователю который пытается совершить над ним действие.
Затем вторая проверка проверяет или еще не содержится такого продукта с таким же именем у отцовского продукта(продуты в системе композитные)
Как можно отрефакторить этот метод и убрать проверки из сервисного метода во что то извне ?
В сервисном методе нужно проверить или пользователь обладает необходимыми разрешениями для выполнения бизнес логики
Вот примерный код который сейчас это делает:
void processProduct() {
if (!SecurityUtils.hasRole("PERMISSION_UPDATE_ANY_PRODUCT")) {
if (SecurityUtils.hasRole("PERMISSION_UPDATE_OWN_PRODUCT")) {
if (!product.getAuthor().equals(user)) {
throw new AccessDeniedException("Access denied, you don't have permission to update other's products");
}
} else {
throw new AccessDeniedException("Access denied, you don't have permissions to update products");
}
}
if (product.getParent() != null) {
Long parentProductId = product.getParent().getId();
Product siblingProduct = productDao.findChildProductByName(parentProductId, name);
if (siblingProduct != null) {
if (!siblingProduct.equals(product)) {
throw new ProductAlreadyExistsException("Parent product already contains a child product with a given name");
}
}
}
.....
doSomeRealBusinessLogic();
}Здесь проверяется или у пользователя есть разрешение — PERMISSION_UPDATE_ANY_PRODUCT и если есть то все ок, если нету то проверяется или есть разрешение PERMISSION_UPDATE_OWN_PRODUCT и если есть то принадлежит ли Продукт пользователю который пытается совершить над ним действие.
Затем вторая проверка проверяет или еще не содержится такого продукта с таким же именем у отцовского продукта(продуты в системе композитные)
Как можно отрефакторить этот метод и убрать проверки из сервисного метода во что то извне ?