fix(web): 修复当前用户过滤无效
This commit is contained in:
@@ -9,10 +9,14 @@ import com.eshore.gringotts.web.domain.base.repository.SimpleRepository;
|
||||
import com.eshore.gringotts.web.domain.user.entity.User;
|
||||
import com.eshore.gringotts.web.domain.user.service.UserService;
|
||||
import java.util.Optional;
|
||||
import javax.persistence.criteria.Predicate;
|
||||
import javax.transaction.Transactional;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.eclipse.collections.api.factory.Lists;
|
||||
import org.eclipse.collections.api.factory.Sets;
|
||||
import org.eclipse.collections.api.list.MutableList;
|
||||
import org.eclipse.collections.api.set.ImmutableSet;
|
||||
import org.springframework.data.domain.Sort;
|
||||
|
||||
/**
|
||||
* @author lanyuanxiaoyao
|
||||
@@ -51,60 +55,59 @@ public abstract class SimpleService<ENTITY extends SimpleEntity> {
|
||||
}
|
||||
|
||||
public ImmutableSet<ENTITY> list() {
|
||||
User user = userService.currentLoginUser();
|
||||
return Sets.immutable.ofAll(repository.findAll(
|
||||
(root, query, builder) -> builder.equal(root.get("createdUser"), user)
|
||||
(root, query, builder) -> {
|
||||
MutableList<Predicate> predicates = Lists.mutable.empty();
|
||||
User user = userService.currentLoginUser();
|
||||
if (User.isNotAdministrator(user)) {
|
||||
predicates.add(builder.equal(root.get("createdUser"), user));
|
||||
}
|
||||
return builder.and(predicates.toArray(new Predicate[predicates.size()]));
|
||||
},
|
||||
Sort.by("createdTime").descending()
|
||||
));
|
||||
}
|
||||
|
||||
public ImmutableSet<ENTITY> list(ImmutableSet<Long> ids) {
|
||||
User user = userService.currentLoginUser();
|
||||
return Sets.immutable.ofAll(repository.findAll(
|
||||
(root, query, builder) -> builder.and(
|
||||
builder.in(root.get("id")).value(ids.select(ObjectUtil::isNotNull)),
|
||||
builder.equal(root.get("createdUser"), user)
|
||||
)
|
||||
(root, query, builder) -> {
|
||||
MutableList<Predicate> predicates = Lists.mutable.of(
|
||||
builder.in(root.get("id")).value(ids.select(ObjectUtil::isNotNull))
|
||||
);
|
||||
User user = userService.currentLoginUser();
|
||||
if (User.isNotAdministrator(user)) {
|
||||
predicates.add(builder.equal(root.get("createdUser"), user));
|
||||
}
|
||||
return builder.and(predicates.toArray(new Predicate[predicates.size()]));
|
||||
},
|
||||
Sort.by("createdTime").descending()
|
||||
));
|
||||
}
|
||||
|
||||
public ENTITY detail(Long id) {
|
||||
if (ObjectUtil.isNull(id)) {
|
||||
return null;
|
||||
}
|
||||
User user = userService.currentLoginUser();
|
||||
return repository.findOne(
|
||||
(root, query, builder) -> builder.and(
|
||||
builder.equal(root.get("id"), id),
|
||||
builder.equal(root.get("createdUser"), user)
|
||||
)
|
||||
)
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
public Optional<ENTITY> detailOptional(Long id) {
|
||||
if (ObjectUtil.isNull(id)) {
|
||||
return Optional.empty();
|
||||
}
|
||||
User user = userService.currentLoginUser();
|
||||
return repository.findOne(
|
||||
(root, query, builder) -> builder.and(
|
||||
builder.equal(root.get("id"), id),
|
||||
builder.equal(root.get("createdUser"), user)
|
||||
)
|
||||
(root, query, builder) -> {
|
||||
MutableList<Predicate> predicates = Lists.mutable.of(
|
||||
builder.equal(root.get("id"), id)
|
||||
);
|
||||
User user = userService.currentLoginUser();
|
||||
if (User.isNotAdministrator(user)) {
|
||||
predicates.add(builder.equal(root.get("createdUser"), user));
|
||||
}
|
||||
return builder.and(predicates.toArray(new Predicate[predicates.size()]));
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
public ENTITY detail(Long id) {
|
||||
return detailOptional(id).orElse(null);
|
||||
}
|
||||
|
||||
public ENTITY detailOrThrow(Long id) {
|
||||
if (ObjectUtil.isNull(id)) {
|
||||
throw new IdNotFoundException(id);
|
||||
}
|
||||
User user = userService.currentLoginUser();
|
||||
return repository.findOne(
|
||||
(root, query, builder) -> builder.and(
|
||||
builder.equal(root.get("id"), id),
|
||||
builder.equal(root.get("createdUser"), user)
|
||||
)
|
||||
).orElseThrow(() -> new IdNotFoundException(id));
|
||||
return detailOptional(id).orElseThrow(() -> new IdNotFoundException(id));
|
||||
}
|
||||
|
||||
@Transactional(rollbackOn = Throwable.class)
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.eshore.gringotts.web.domain.confirmation.entity.Confirmation;
|
||||
import com.eshore.gringotts.web.domain.confirmation.service.ConfirmationService;
|
||||
import com.eshore.gringotts.web.domain.resource.service.DataResourceService;
|
||||
import com.eshore.gringotts.web.domain.upload.service.DataFileService;
|
||||
import java.time.LocalDateTime;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -97,6 +98,10 @@ public class ConfirmationController extends SimpleController<Confirmation, Confi
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public static final class DetailItem extends SaveItem {
|
||||
private String targetName;
|
||||
private LocalDateTime createdTime;
|
||||
private String createdUsername;
|
||||
private LocalDateTime modifiedTime;
|
||||
private String modifiedUsername;
|
||||
|
||||
public DetailItem(Confirmation confirmation) {
|
||||
this.setId(confirmation.getId());
|
||||
@@ -104,6 +109,10 @@ public class ConfirmationController extends SimpleController<Confirmation, Confi
|
||||
this.setTargetName(confirmation.getTarget().getName());
|
||||
this.setDescription(confirmation.getDescription());
|
||||
this.setEvidenceFiles(Sets.immutable.ofAll(confirmation.getEvidences()).collect(FileInfo::new));
|
||||
this.setCreatedTime(confirmation.getCreatedTime());
|
||||
this.setCreatedUsername(confirmation.getCreatedUser().getUsername());
|
||||
this.setModifiedTime(confirmation.getModifiedTime());
|
||||
this.setModifiedUsername(confirmation.getModifiedUser().getUsername());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import javax.persistence.CascadeType;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.ConstraintMode;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.EntityListeners;
|
||||
import javax.persistence.EnumType;
|
||||
import javax.persistence.Enumerated;
|
||||
import javax.persistence.FetchType;
|
||||
@@ -24,6 +25,7 @@ import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
import org.hibernate.annotations.DynamicUpdate;
|
||||
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
|
||||
|
||||
/**
|
||||
* 确权
|
||||
@@ -36,6 +38,7 @@ import org.hibernate.annotations.DynamicUpdate;
|
||||
@ToString
|
||||
@Entity
|
||||
@DynamicUpdate
|
||||
@EntityListeners(AuditingEntityListener.class)
|
||||
@Table(name = Constants.TABLE_PREFIX + "confirmation")
|
||||
@NamedEntityGraph(name = "confirmation.list", attributeNodes = {
|
||||
@NamedAttributeNode(value = "target"),
|
||||
@@ -54,6 +57,7 @@ public class Confirmation extends SimpleEntity {
|
||||
private String description;
|
||||
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
|
||||
@JoinTable(foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT), inverseForeignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
|
||||
@ToString.Exclude
|
||||
private Set<DataFile> evidences;
|
||||
@Column(nullable = false)
|
||||
@Enumerated(EnumType.STRING)
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.eshore.gringotts.web.domain.user.entity.User;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import javax.transaction.Transactional;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.data.jpa.repository.EntityGraph;
|
||||
import org.springframework.data.jpa.repository.Modifying;
|
||||
@@ -21,7 +22,7 @@ import org.springframework.stereotype.Repository;
|
||||
public interface ConfirmationRepository extends SimpleRepository<Confirmation, Long> {
|
||||
@Override
|
||||
@EntityGraph(value = "confirmation.list", type = EntityGraph.EntityGraphType.FETCH)
|
||||
List<Confirmation> findAll(Specification<Confirmation> specification);
|
||||
List<Confirmation> findAll(Specification<Confirmation> specification, Sort sort);
|
||||
|
||||
@Override
|
||||
@EntityGraph(value = "confirmation.detail", type = EntityGraph.EntityGraphType.FETCH)
|
||||
@@ -31,6 +32,6 @@ public interface ConfirmationRepository extends SimpleRepository<Confirmation, L
|
||||
|
||||
@Transactional
|
||||
@Modifying
|
||||
@Query("update Confirmation confirmation set confirmation.state = ?2, confirmation.modifiedUser = ?3 where confirmation.id = ?1")
|
||||
@Query("update Confirmation confirmation set confirmation.state = ?2, confirmation.modifiedUser = ?3, confirmation.modifiedTime = current_timestamp where confirmation.id = ?1")
|
||||
void updateStateById(Long id, Confirmation.State state, User modifiedUser);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.eshore.gringotts.web.domain.confirmation.service;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.eshore.gringotts.web.domain.base.service.SimpleService;
|
||||
import com.eshore.gringotts.web.domain.confirmation.entity.Confirmation;
|
||||
import com.eshore.gringotts.web.domain.confirmation.repository.ConfirmationRepository;
|
||||
@@ -25,7 +26,7 @@ public class ConfirmationService extends SimpleService<Confirmation> {
|
||||
|
||||
@Override
|
||||
public Long save(Confirmation entity) {
|
||||
if (confirmationRepository.existsByTarget_Id(entity.getTarget().getId())) {
|
||||
if (ObjectUtil.isNull(entity.getId()) && confirmationRepository.existsByTarget_Id(entity.getTarget().getId())) {
|
||||
throw new ConfirmationDuplicatedException();
|
||||
}
|
||||
return super.save(entity);
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.eshore.gringotts.web.domain.base.repository.SimpleRepository;
|
||||
import com.eshore.gringotts.web.domain.resource.entity.DataResource;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.data.jpa.repository.EntityGraph;
|
||||
import org.springframework.stereotype.Repository;
|
||||
@@ -13,7 +14,7 @@ import org.springframework.stereotype.Repository;
|
||||
public interface DataResourceRepository extends SimpleRepository<DataResource, Long> {
|
||||
@Override
|
||||
@EntityGraph(value = "data_resource.list", type = EntityGraph.EntityGraphType.FETCH)
|
||||
List<DataResource> findAll(Specification<DataResource> specification);
|
||||
List<DataResource> findAll(Specification<DataResource> specification, Sort sort);
|
||||
|
||||
@Override
|
||||
@EntityGraph(value = "data_resource.detail", type = EntityGraph.EntityGraphType.FETCH)
|
||||
|
||||
@@ -58,6 +58,42 @@ public class User extends SimpleEntity {
|
||||
@ToString.Exclude
|
||||
private User checkedUser;
|
||||
|
||||
public static boolean isAdministrator(User user) {
|
||||
return Role.ADMINISTRATOR.equals(user.role);
|
||||
}
|
||||
|
||||
public static boolean isNotAdministrator(User user) {
|
||||
return !isAdministrator(user);
|
||||
}
|
||||
|
||||
public static boolean isChecker(User user) {
|
||||
return Role.CHECKER.equals(user.role);
|
||||
}
|
||||
|
||||
public static boolean isNotChecker(User user) {
|
||||
return !isChecker(user);
|
||||
}
|
||||
|
||||
public static boolean isProvider(User user) {
|
||||
return Role.PROVIDER.equals(user.role);
|
||||
}
|
||||
|
||||
public static boolean isNotProvider(User user) {
|
||||
return !isProvider(user);
|
||||
}
|
||||
|
||||
public static boolean isCustomer(User user) {
|
||||
return Role.CUSTOMER.equals(user.role);
|
||||
}
|
||||
|
||||
public static boolean isNotCustomer(User user) {
|
||||
return !isCustomer(user);
|
||||
}
|
||||
|
||||
public static boolean isUser(User user) {
|
||||
return isProvider(user) || isCustomer(user);
|
||||
}
|
||||
|
||||
public enum State {
|
||||
/**
|
||||
* 审查中
|
||||
|
||||
Reference in New Issue
Block a user