diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 5c1711d..021f830 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -7,8 +7,8 @@
-
+
@@ -24,7 +24,7 @@
-
+
\ No newline at end of file
diff --git a/gringotts-frontend/components/permission/dialog-permission.js b/gringotts-frontend/components/permission/dialog-permission.js
index 5a2b29c..7d845ce 100644
--- a/gringotts-frontend/components/permission/dialog-permission.js
+++ b/gringotts-frontend/components/permission/dialog-permission.js
@@ -16,6 +16,16 @@ import {resourceDetailDialog} from "../resource/dialog-resource.js";
const CONFIRMATION_TYPE = 'confirmation'
const AUTHENTICATION_TYPE = 'authentication'
+const CONFIRMATION = {
+ type: 'confirmation',
+ pickerApi: apiGet('${base}/data_resource/list_no_confirmation')
+}
+
+const AUTHENTICATION = {
+ type: 'authentication',
+ pickerApi: apiGet('${base}/data_resource/list_no_authentication')
+}
+
function detailForm(pickerApi = apiGet('${base}/data_resource/list'), showCreatedUserAndModifiedUser = false) {
return {
debug: information.debug,
@@ -98,16 +108,16 @@ function detailForm(pickerApi = apiGet('${base}/data_resource/list'), showCreate
}
export function confirmationAddDialog() {
- return permissionAddDialog(CONFIRMATION_TYPE)
+ return permissionAddDialog(CONFIRMATION)
}
export function authenticationAddDialog() {
- return permissionAddDialog(AUTHENTICATION_TYPE)
+ return permissionAddDialog(AUTHENTICATION)
}
-function permissionAddDialog(type) {
+function permissionAddDialog(config) {
let data = {add: true}
- data[type] = true
+ data[config.type] = true
return {
actionType: 'dialog',
dialog: {
@@ -125,8 +135,8 @@ function permissionAddDialog(type) {
}
],
body: {
- ...detailForm(generateApi(type)),
- api: apiPost(`\${base}/${type}/save`),
+ ...detailForm(config.pickerApi),
+ api: apiPost(`\${base}/${config.type}/save`),
data: data,
}
}
@@ -134,16 +144,16 @@ function permissionAddDialog(type) {
}
export function confirmationDetailDialog(field = 'id', actions = []) {
- return permissionDetailDialog(CONFIRMATION_TYPE, field, actions)
+ return permissionDetailDialog(CONFIRMATION, field, actions)
}
export function authenticationDetailDialog(field = 'id', actions = []) {
- return permissionDetailDialog(AUTHENTICATION_TYPE, field, actions)
+ return permissionDetailDialog(AUTHENTICATION, field, actions)
}
-function permissionDetailDialog(type, field = 'id', actions = []) {
+function permissionDetailDialog(config, field = 'id', actions = []) {
let data = {detail: true}
- data[type] = true
+ data[config.type] = true
return {
actionType: 'dialog',
dialog: {
@@ -151,8 +161,8 @@ function permissionDetailDialog(type, field = 'id', actions = []) {
size: 'md',
actions: actions,
body: {
- ...detailForm(generateApi(type), true),
- initApi: apiGet(`\${base}/${type}/detail/\${${field}}`),
+ ...detailForm(config.pickerApi, true),
+ initApi: apiGet(`\${base}/${config.type}/detail/\${${field}}`),
static: true,
data: data,
}
@@ -161,16 +171,16 @@ function permissionDetailDialog(type, field = 'id', actions = []) {
}
export function confirmationEditeDialog(field = 'id') {
- return permissionEditeDialog(CONFIRMATION_TYPE, field)
+ return permissionEditeDialog(CONFIRMATION, field)
}
export function authenticationEditeDialog(field = 'id') {
- return permissionEditeDialog(AUTHENTICATION_TYPE, field)
+ return permissionEditeDialog(AUTHENTICATION, field)
}
-function permissionEditeDialog(type, field = 'id') {
+function permissionEditeDialog(config, field = 'id') {
let data = {edit: true}
- data[type] = true
+ data[config.type] = true
return {
actionType: 'dialog',
dialog: {
@@ -188,20 +198,11 @@ function permissionEditeDialog(type, field = 'id') {
}
],
body: {
- ...detailForm(generateApi(type)),
- api: apiPost(`\${base}/${type}/save`),
- initApi: apiGet(`\${base}/${type}/detail/\${${field}}`),
+ ...detailForm(config.pickerApi),
+ api: apiPost(`\${base}/${config.type}/save`),
+ initApi: apiGet(`\${base}/${config.type}/detail/\${${field}}`),
data: data,
},
}
}
}
-
-function generateApi(type) {
- switch (type) {
- case AUTHENTICATION_TYPE:
- return apiGet('${base}/data_resource/list_no_authentication')
- case CONFIRMATION_TYPE:
- return apiGet('${base}/data_resource/list_no_confirmation')
- }
-}
diff --git a/gringotts-web/pom.xml b/gringotts-web/pom.xml
index 89b6b78..e2b341b 100644
--- a/gringotts-web/pom.xml
+++ b/gringotts-web/pom.xml
@@ -28,6 +28,12 @@
com.blinkfox
fenix-spring-boot-starter
+
+ org.hibernate
+ hibernate-jpamodelgen
+ ${hibernate.version}
+ provided
+
com.h2database
h2
@@ -37,6 +43,18 @@
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ true
+
+
+ lombok.launch.AnnotationProcessorHider$AnnotationProcessor,org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
+
+
+
+
org.springframework.boot
spring-boot-maven-plugin
diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/authentication/service/AuthenticationService.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/authentication/service/AuthenticationService.java
index 462fc40..e287e65 100644
--- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/authentication/service/AuthenticationService.java
+++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/authentication/service/AuthenticationService.java
@@ -3,17 +3,23 @@ package com.eshore.gringotts.web.domain.authentication.service;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.eshore.gringotts.web.domain.authentication.entity.Authentication;
+import com.eshore.gringotts.web.domain.authentication.entity.Authentication_;
import com.eshore.gringotts.web.domain.authentication.repository.AuthenticationRepository;
import com.eshore.gringotts.web.domain.base.entity.CheckingNeededEntity;
import com.eshore.gringotts.web.domain.base.service.CheckingService;
import com.eshore.gringotts.web.domain.base.service.LogicDeleteService;
import com.eshore.gringotts.web.domain.check.entity.CheckOrder;
+import com.eshore.gringotts.web.domain.check.entity.CheckOrder_;
import com.eshore.gringotts.web.domain.check.service.CheckOrderService;
import com.eshore.gringotts.web.domain.user.entity.User;
import com.eshore.gringotts.web.domain.user.service.UserService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.persistence.EntityManager;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
import javax.transaction.Transactional;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.collections.api.factory.Maps;
@@ -41,6 +47,25 @@ public class AuthenticationService extends LogicDeleteService im
this.mapper = builder.build();
}
+ @Override
+ protected Predicate listPredicate(Root root, CriteriaQuery> query, CriteriaBuilder builder) {
+ if (ignoreWhenAdministrator()) {
+ return null;
+ }
+ User loginUser = userService.currentLoginUser();
+ return builder.or(
+ builder.equal(root.get(Authentication_.createdUser), loginUser),
+ builder.and(
+ builder.equal(root.get(Authentication_.order).get(CheckOrder_.target), CheckOrder.Target.ROLE),
+ builder.equal(root.get(Authentication_.order).get(CheckOrder_.targetRole), loginUser.getRole())
+ ),
+ builder.and(
+ builder.equal(root.get(Authentication_.order).get(CheckOrder_.target), CheckOrder.Target.USER),
+ builder.equal(root.get(Authentication_.order).get(CheckOrder_.targetUser), loginUser)
+ )
+ );
+ }
+
@Override
public Long save(Authentication entity) {
if (ObjectUtil.isNull(entity.getId()) && authenticationRepository.findOne(
diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/repository/SimpleRepository.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/repository/SimpleRepository.java
index 555d355..6e4ca11 100644
--- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/repository/SimpleRepository.java
+++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/repository/SimpleRepository.java
@@ -3,6 +3,7 @@ package com.eshore.gringotts.web.domain.base.repository;
import com.blinkfox.fenix.jpa.FenixJpaRepository;
import com.blinkfox.fenix.specification.FenixJpaSpecificationExecutor;
import org.springframework.data.repository.NoRepositoryBean;
+import org.springframework.data.repository.query.QueryByExampleExecutor;
/**
* 整合一下
@@ -11,5 +12,5 @@ import org.springframework.data.repository.NoRepositoryBean;
* @date 2024-11-21
*/
@NoRepositoryBean
-public interface SimpleRepository extends FenixJpaRepository, FenixJpaSpecificationExecutor {
+public interface SimpleRepository extends FenixJpaRepository, FenixJpaSpecificationExecutor, QueryByExampleExecutor {
}
diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/LogicDeleteService.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/LogicDeleteService.java
index 0c635a0..e32be2b 100644
--- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/LogicDeleteService.java
+++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/LogicDeleteService.java
@@ -13,8 +13,6 @@ import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.transaction.Transactional;
import lombok.extern.slf4j.Slf4j;
-import org.eclipse.collections.api.factory.Lists;
-import org.eclipse.collections.api.list.ImmutableList;
/**
* @author lanyuanxiaoyao
@@ -30,8 +28,8 @@ public abstract class LogicDeleteService exten
}
@Override
- protected ImmutableList listPredicates(Root root, CriteriaQuery> query, CriteriaBuilder builder) {
- return Lists.immutable.of(builder.equal(root.get("deleted"), false));
+ protected Predicate listPredicate(Root root, CriteriaQuery> query, CriteriaBuilder builder) {
+ return builder.equal(root.get("deleted"), false);
}
@Transactional(rollbackOn = Throwable.class)
diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/SimpleServiceSupport.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/SimpleServiceSupport.java
index 6482da4..97ffa0d 100644
--- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/SimpleServiceSupport.java
+++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/SimpleServiceSupport.java
@@ -58,17 +58,16 @@ public abstract class SimpleServiceSupport implemen
@Override
public ImmutableList list() throws Exception {
- return Lists.immutable.ofAll(repository.findAll((root, query, builder) -> builder.and(listPredicates(root, query, builder).toArray(new Predicate[]{}))));
+ return Lists.immutable.ofAll(repository.findAll(this::listPredicate));
}
@Override
public ImmutableList list(ImmutableSet ids) throws Exception {
return Lists.immutable.ofAll(repository.findAll(
- (root, query, builder) -> {
- MutableList predicates = Lists.mutable.ofAll(listPredicates(root, query, builder));
- predicates.add(builder.in(root.get("id")).value(ids));
- return builder.and(predicates.toArray(new Predicate[predicates.size()]));
- }
+ (root, query, builder) -> builder.and(
+ listPredicate(root, query, builder),
+ builder.in(root.get("id")).value(ids)
+ )
));
}
@@ -153,20 +152,23 @@ public abstract class SimpleServiceSupport implemen
return predicates.toImmutable();
}
- protected ImmutableList listPredicates(Root root, CriteriaQuery> query, CriteriaBuilder builder) {
- MutableList predicates = Lists.mutable.empty();
+ protected Boolean ignoreWhenAdministrator() {
+ return User.isAdministrator(userService.currentLoginUser());
+ }
+
+ protected Predicate listPredicate(Root root, CriteriaQuery> query, CriteriaBuilder builder) {
User user = userService.currentLoginUser();
if (User.isNotAdministrator(user)) {
- predicates.add(builder.equal(root.get("createdUser"), user));
+ return builder.equal(root.get("createdUser"), user);
}
- return predicates.toImmutable();
+ return null;
}
@Override
public ImmutableList list(Query listQuery) throws Exception {
return Lists.immutable.ofAll(repository.findAll(
(root, query, builder) -> {
- MutableList predicates = Lists.mutable.ofAll(listPredicates(root, query, builder));
+ MutableList predicates = Lists.mutable.of(listPredicate(root, query, builder));
predicates.addAllIterable(queryPredicates(listQuery.getQuery(), root, query, builder));
return builder.and(predicates.toArray(new Predicate[predicates.size()]));
},
@@ -180,11 +182,10 @@ public abstract class SimpleServiceSupport implemen
return Optional.empty();
}
return repository.findOne(
- (root, query, builder) -> {
- MutableList predicates = Lists.mutable.ofAll(listPredicates(root, query, builder));
- predicates.add(builder.equal(root.get("id"), id));
- return builder.and(predicates.toArray(new Predicate[predicates.size()]));
- }
+ (root, query, builder) -> builder.and(
+ listPredicate(root, query, builder),
+ builder.equal(root.get("id"), id)
+ )
);
}
diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/check/service/CheckOrderService.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/check/service/CheckOrderService.java
index e7e4001..caef231 100644
--- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/check/service/CheckOrderService.java
+++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/check/service/CheckOrderService.java
@@ -16,8 +16,6 @@ import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import lombok.extern.slf4j.Slf4j;
-import org.eclipse.collections.api.factory.Lists;
-import org.eclipse.collections.api.list.ImmutableList;
import org.eclipse.collections.api.map.ImmutableMap;
import org.springframework.context.ApplicationContext;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
@@ -44,19 +42,20 @@ public class CheckOrderService extends SimpleServiceSupport {
}
@Override
- protected ImmutableList listPredicates(Root root, CriteriaQuery> query, CriteriaBuilder builder) {
+ protected Predicate listPredicate(Root root, CriteriaQuery> query, CriteriaBuilder builder) {
User user = userService.currentLoginUser();
- return Lists.immutable.of(
- builder.or(
- builder.equal(root.get("createdUser"), user),
- builder.and(
- builder.equal(root.get("target"), CheckOrder.Target.USER),
- builder.equal(root.get("targetUser"), user)
- ),
- builder.and(
- builder.equal(root.get("target"), CheckOrder.Target.ROLE),
- builder.equal(root.get("targetRole"), user.getRole())
- )
+ if (ObjectUtil.equals(user.getRole(), User.Role.ADMINISTRATOR)) {
+ return null;
+ }
+ return builder.or(
+ builder.equal(root.get("createdUser"), user),
+ builder.and(
+ builder.equal(root.get("target"), CheckOrder.Target.USER),
+ builder.equal(root.get("targetUser"), user)
+ ),
+ builder.and(
+ builder.equal(root.get("target"), CheckOrder.Target.ROLE),
+ builder.equal(root.get("targetRole"), user.getRole())
)
);
}
diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/confirmation/service/ConfirmationService.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/confirmation/service/ConfirmationService.java
index b6aefef..bbced20 100644
--- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/confirmation/service/ConfirmationService.java
+++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/confirmation/service/ConfirmationService.java
@@ -6,13 +6,19 @@ import com.eshore.gringotts.web.domain.base.entity.CheckingNeededEntity;
import com.eshore.gringotts.web.domain.base.service.CheckingService;
import com.eshore.gringotts.web.domain.base.service.SimpleServiceSupport;
import com.eshore.gringotts.web.domain.check.entity.CheckOrder;
+import com.eshore.gringotts.web.domain.check.entity.CheckOrder_;
import com.eshore.gringotts.web.domain.check.service.CheckOrderService;
import com.eshore.gringotts.web.domain.confirmation.entity.Confirmation;
+import com.eshore.gringotts.web.domain.confirmation.entity.Confirmation_;
import com.eshore.gringotts.web.domain.confirmation.repository.ConfirmationRepository;
import com.eshore.gringotts.web.domain.user.entity.User;
import com.eshore.gringotts.web.domain.user.service.UserService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
import javax.transaction.Transactional;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.collections.api.factory.Maps;
@@ -38,6 +44,25 @@ public class ConfirmationService extends SimpleServiceSupport impl
this.mapper = builder.build();
}
+ @Override
+ protected Predicate listPredicate(Root root, CriteriaQuery> query, CriteriaBuilder builder) {
+ if (ignoreWhenAdministrator()) {
+ return null;
+ }
+ User loginUser = userService.currentLoginUser();
+ return builder.or(
+ builder.equal(root.get(Confirmation_.createdUser), loginUser),
+ builder.and(
+ builder.equal(root.get(Confirmation_.order).get(CheckOrder_.target), CheckOrder.Target.ROLE),
+ builder.equal(root.get(Confirmation_.order).get(CheckOrder_.targetRole), loginUser.getRole())
+ ),
+ builder.and(
+ builder.equal(root.get(Confirmation_.order).get(CheckOrder_.target), CheckOrder.Target.USER),
+ builder.equal(root.get(Confirmation_.order).get(CheckOrder_.targetUser), loginUser)
+ )
+ );
+ }
+
@Override
public Long save(Confirmation entity) {
if (ObjectUtil.isNull(entity.getId()) && confirmationRepository.existsByTarget_Id(entity.getTarget().getId())) {
@@ -56,7 +81,7 @@ public class ConfirmationService extends SimpleServiceSupport impl
CheckOrder.Type.CONFIRMATION,
mapper.writeValueAsString(Maps.immutable.of("confirmationId", confirmation.getId())),
"com.eshore.gringotts.web.domain.confirmation.service.ConfirmationService",
- User.Role.ADMINISTRATOR
+ User.Role.CHECKER
));
CheckOrder order = checkOrderService.detailOrThrow(orderId);
confirmation.setOrder(order);
diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/service/DataResourceService.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/service/DataResourceService.java
index 98d341f..de34abd 100644
--- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/service/DataResourceService.java
+++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/service/DataResourceService.java
@@ -1,17 +1,25 @@
package com.eshore.gringotts.web.domain.resource.service;
import com.eshore.gringotts.web.domain.authentication.entity.Authentication;
+import com.eshore.gringotts.web.domain.authentication.entity.Authentication_;
import com.eshore.gringotts.web.domain.base.entity.CheckingNeededEntity;
import com.eshore.gringotts.web.domain.base.service.SimpleServiceSupport;
import com.eshore.gringotts.web.domain.confirmation.entity.Confirmation;
+import com.eshore.gringotts.web.domain.confirmation.entity.Confirmation_;
import com.eshore.gringotts.web.domain.resource.entity.DataResource;
+import com.eshore.gringotts.web.domain.resource.entity.DataResource_;
import com.eshore.gringotts.web.domain.resource.entity.format.ResourceFormat;
import com.eshore.gringotts.web.domain.resource.entity.type.ResourceType;
import com.eshore.gringotts.web.domain.resource.repository.DataResourceRepository;
import com.eshore.gringotts.web.domain.resource.repository.ResourceFormatRepository;
import com.eshore.gringotts.web.domain.resource.repository.ResourceTypeRepository;
+import com.eshore.gringotts.web.domain.user.entity.User;
import com.eshore.gringotts.web.domain.user.service.UserService;
+import com.eshore.gringotts.web.helper.EntityHelper;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Join;
+import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.criteria.Subquery;
import lombok.extern.slf4j.Slf4j;
@@ -40,6 +48,36 @@ public class DataResourceService extends SimpleServiceSupport {
this.userService = userService;
}
+ @Override
+ protected Predicate listPredicate(Root root, CriteriaQuery> query, CriteriaBuilder builder) {
+ if (ignoreWhenAdministrator()) {
+ return null;
+ }
+ User loginUser = userService.currentLoginUser();
+
+ Subquery confirmationSubquery = query.subquery(Confirmation.class);
+ Root confirmationRoot = confirmationSubquery.from(Confirmation.class);
+ confirmationSubquery.select(confirmationRoot)
+ .where(
+ builder.equal(confirmationRoot.get(Confirmation_.target), root),
+ EntityHelper.checkNeededEntityPrediction(confirmationRoot, builder, loginUser)
+ );
+
+ Subquery authenticationSubquery = query.subquery(Authentication.class);
+ Root authenticationRoot = authenticationSubquery.from(Authentication.class);
+ authenticationSubquery.select(authenticationRoot)
+ .where(
+ builder.equal(authenticationRoot.get(Authentication_.target), root),
+ EntityHelper.checkNeededEntityPrediction(authenticationRoot, builder, loginUser)
+ );
+
+ return builder.or(
+ builder.equal(root.get(DataResource_.createdUser), loginUser),
+ builder.exists(confirmationSubquery),
+ builder.exists(authenticationSubquery)
+ );
+ }
+
public ImmutableList listNoConfirmation() {
return Lists.immutable.ofAll(dataResourceRepository.findAllByConfirmationIsNull());
}
diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/upload/service/DataFileService.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/upload/service/DataFileService.java
index ddba322..874df31 100644
--- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/upload/service/DataFileService.java
+++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/upload/service/DataFileService.java
@@ -1,10 +1,21 @@
package com.eshore.gringotts.web.domain.upload.service;
+import com.eshore.gringotts.web.domain.authentication.entity.Authentication;
+import com.eshore.gringotts.web.domain.authentication.entity.Authentication_;
import com.eshore.gringotts.web.domain.base.service.SimpleServiceSupport;
+import com.eshore.gringotts.web.domain.confirmation.entity.Confirmation;
+import com.eshore.gringotts.web.domain.confirmation.entity.Confirmation_;
import com.eshore.gringotts.web.domain.upload.entity.DataFile;
+import com.eshore.gringotts.web.domain.upload.entity.DataFile_;
import com.eshore.gringotts.web.domain.upload.repository.DataFileRepository;
import com.eshore.gringotts.web.domain.user.entity.User;
import com.eshore.gringotts.web.domain.user.service.UserService;
+import com.eshore.gringotts.web.helper.EntityHelper;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.persistence.criteria.Subquery;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -26,11 +37,34 @@ public class DataFileService extends SimpleServiceSupport {
this.userService = userService;
}
- public DataFile detail(String id) {
- if (id == null) {
+ @Override
+ protected Predicate listPredicate(Root root, CriteriaQuery> query, CriteriaBuilder builder) {
+ if (ignoreWhenAdministrator()) {
return null;
}
- return detail(Long.valueOf(id));
+ User loginUser = userService.currentLoginUser();
+
+ Subquery confirmationSubquery = query.subquery(Confirmation.class);
+ Root confirmationRoot = confirmationSubquery.from(Confirmation.class);
+ confirmationSubquery.select(confirmationRoot)
+ .where(
+ builder.isMember(root, confirmationRoot.get(Confirmation_.evidences)),
+ EntityHelper.checkNeededEntityPrediction(confirmationRoot, builder, loginUser)
+ );
+
+ Subquery authenticationSubquery = query.subquery(Authentication.class);
+ Root authenticationRoot = authenticationSubquery.from(Authentication.class);
+ authenticationSubquery.select(authenticationRoot)
+ .where(
+ builder.isMember(root, authenticationRoot.get(Authentication_.evidences)),
+ EntityHelper.checkNeededEntityPrediction(authenticationRoot, builder, loginUser)
+ );
+
+ return builder.or(
+ builder.equal(root.get(DataFile_.createdUser), loginUser),
+ builder.exists(confirmationSubquery),
+ builder.exists(authenticationSubquery)
+ );
}
public Long initialDataFile(String filename) {
diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/helper/EntityHelper.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/helper/EntityHelper.java
index 912ab70..d88af5a 100644
--- a/gringotts-web/src/main/java/com/eshore/gringotts/web/helper/EntityHelper.java
+++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/helper/EntityHelper.java
@@ -1,7 +1,15 @@
package com.eshore.gringotts.web.helper;
import cn.hutool.core.util.ObjectUtil;
+import com.eshore.gringotts.web.domain.base.entity.CheckingNeededEntity;
+import com.eshore.gringotts.web.domain.base.entity.CheckingNeededEntity_;
+import com.eshore.gringotts.web.domain.check.entity.CheckOrder;
+import com.eshore.gringotts.web.domain.check.entity.CheckOrder_;
+import com.eshore.gringotts.web.domain.user.entity.User;
import java.util.function.Supplier;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
import org.springframework.data.jpa.repository.JpaRepository;
/**
@@ -17,4 +25,17 @@ public class EntityHelper {
repository.delete(old);
}
}
+
+ public static Predicate checkNeededEntityPrediction(Root extends CheckingNeededEntity> root, CriteriaBuilder builder, User loginUser) {
+ return builder.or(
+ builder.and(
+ builder.equal(root.get(CheckingNeededEntity_.order).get(CheckOrder_.target), CheckOrder.Target.ROLE),
+ builder.equal(root.get(CheckingNeededEntity_.order).get(CheckOrder_.targetRole), loginUser.getRole())
+ ),
+ builder.and(
+ builder.equal(root.get(CheckingNeededEntity_.order).get(CheckOrder_.target), CheckOrder.Target.USER),
+ builder.equal(root.get(CheckingNeededEntity_.order).get(CheckOrder_.targetUser), loginUser)
+ )
+ );
+ }
}
diff --git a/pom.xml b/pom.xml
index b682128..f2b21fb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,6 +29,8 @@
5.8.32
2.10.0
11.1.0
+ 5.1.0
+ 5.6.15.Final
@@ -103,6 +105,17 @@
fenix-spring-boot-starter
2.7.0
+
+ com.querydsl
+ querydsl-jpa
+ ${querydsl.version}
+
+
+ com.querydsl
+ querydsl-apt
+ ${querydsl.version}
+ provided
+
@@ -144,7 +157,6 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.13.0
true
@@ -152,11 +164,24 @@
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.13.0
+
+ true
+
+
org.springframework.boot
spring-boot-maven-plugin
${spring-boot.version}
+
+ com.mysema.maven
+ apt-maven-plugin
+ 1.1.3
+