Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@
</tbody>
</table>

+ 钉钉SDK的封装 👉 :[com.softeng.dingtalk.api](https://github.com/nju-softeng/dingtalk-app-server/tree/main/src/main/java/com/softeng/dingtalk/api)
+ 钉钉SDK的封装 👉 :[com.softeng.dingtalk.dingApi](https://github.com/nju-softeng/dingtalk-app-server/tree/main/src/main/java/com/softeng/dingtalk/api)
+ 项目前端代码 👉 :[dingtalk-app-web](https://github.com/nju-softeng/dingtalk-app-web)

### 注意事项
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/softeng/dingtalk/DingtalkApplication.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.softeng.dingtalk;

import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module;
import com.softeng.dingtalk.repository.impl.CustomizedRepositoryImpl;
import com.softeng.dingtalk.dao.repository.impl.CustomizedRepositoryImpl;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
Expand All @@ -13,7 +13,7 @@
@EnableCaching
@EnableScheduling
@SpringBootApplication
@MapperScan("com.softeng.dingtalk.mapper")
@MapperScan("com.softeng.dingtalk.dao.mapper")
@EnableJpaRepositories(repositoryBaseClass = CustomizedRepositoryImpl.class)
public class DingtalkApplication {

Expand Down
23 changes: 6 additions & 17 deletions src/main/java/com/softeng/dingtalk/aspect/ACBlockchainAspect.java
Original file line number Diff line number Diff line change
@@ -1,28 +1,17 @@
package com.softeng.dingtalk.aspect;


import com.alibaba.fastjson.JSON;
import com.softeng.dingtalk.entity.AcRecord;
import com.softeng.dingtalk.fabric.FabricManager;
import com.softeng.dingtalk.repository.AcRecordRepository;
import com.softeng.dingtalk.po_entity.AcRecord;
import com.softeng.dingtalk.dao.repository.AcRecordRepository;
import com.softeng.dingtalk.service.SystemService;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.hyperledger.fabric.sdk.exception.CryptoException;
import org.hyperledger.fabric.sdk.exception.InvalidArgumentException;
import org.hyperledger.fabric.sdk.exception.TransactionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.spec.InvalidKeySpecException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

@ConditionalOnExpression("${blockchain.service.enable:true}")
Expand All @@ -37,16 +26,16 @@ public class ACBlockchainAspect {
boolean isCreate=false;
//FabricManager manager=FabricManager.obtain();
public static List timeCostList=new ArrayList<>();
@Pointcut("execution(* com.softeng.dingtalk.repository.AcRecordRepository.save(..))")
@Pointcut("execution(* com.softeng.dingtalk.dao.repository.AcRecordRepository.save(..))")
public void saveRecord(){
}

@Pointcut("execution(* com.softeng.dingtalk.repository.AcRecordRepository.deleteAll(..))")
@Pointcut("execution(* com.softeng.dingtalk.dao.repository.AcRecordRepository.deleteAll(..))")
public void deleteRecordList(){
}

@Pointcut("execution(* com.softeng.dingtalk.repository.AcRecordRepository.saveAll(..)) ||" +
"execution(* com.softeng.dingtalk.repository.AcRecordRepository.saveBatch(..))")
@Pointcut("execution(* com.softeng.dingtalk.dao.repository.AcRecordRepository.saveAll(..)) ||" +
"execution(* com.softeng.dingtalk.dao.repository.AcRecordRepository.saveBatch(..))")
public void saveRecordList(){
}

Expand Down
17 changes: 17 additions & 0 deletions src/main/java/com/softeng/dingtalk/aspect/AccessPermission.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.softeng.dingtalk.aspect;

import com.softeng.dingtalk.enums.PermissionEnum;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* 指定权限通行
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AccessPermission {
PermissionEnum value();
}
28 changes: 28 additions & 0 deletions src/main/java/com/softeng/dingtalk/aspect/AuthAspect.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.softeng.dingtalk.aspect;

import com.softeng.dingtalk.component.UserContextHolder;
import com.softeng.dingtalk.exception.CustomExceptionEnum;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Aspect
@Component
public class AuthAspect {

@Resource
private UserContextHolder userContextHolder;

@Before("@annotation(accessPermission)")
public void checkPermission(AccessPermission accessPermission) {
for (Integer permissionId : userContextHolder.getUserContext().getPermissionIds()) {
if (accessPermission.value().getCode() == permissionId) {
return;
}
}
CustomExceptionEnum.ACCESS_DENIED.throwWithMessage("需要权限:" + accessPermission.value().getName());
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.softeng.dingtalk.component;

import com.softeng.dingtalk.entity.User;
import com.softeng.dingtalk.po_entity.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

Expand Down

This file was deleted.

15 changes: 6 additions & 9 deletions src/main/java/com/softeng/dingtalk/component/Timer.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package com.softeng.dingtalk.component;

import com.softeng.dingtalk.api.MessageApi;
import com.softeng.dingtalk.constant.LocalUrlConstant;
import com.softeng.dingtalk.entity.*;
import com.softeng.dingtalk.enums.Position;
import com.softeng.dingtalk.repository.AcRecordRepository;
import com.softeng.dingtalk.repository.ExternalPaperRepository;
import com.softeng.dingtalk.repository.InternalPaperRepository;
import com.softeng.dingtalk.repository.VoteRepository;
import com.softeng.dingtalk.component.dingApi.MessageApi;
import com.softeng.dingtalk.po_entity.*;
import com.softeng.dingtalk.dao.repository.AcRecordRepository;
import com.softeng.dingtalk.dao.repository.ExternalPaperRepository;
import com.softeng.dingtalk.dao.repository.InternalPaperRepository;
import com.softeng.dingtalk.dao.repository.VoteRepository;
import com.softeng.dingtalk.service.InitService;
import com.softeng.dingtalk.service.SystemService;
import com.softeng.dingtalk.service.VoteService;
Expand All @@ -21,7 +19,6 @@
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;

/**
* @author zhanyeye
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package com.softeng.dingtalk.component;

import com.softeng.dingtalk.component.encryptor.EncryptorComponent;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.List;

/**
* @Author: LiXiaoKang
* @CreateTime: 2023-02-09
* @Description: 拦截器保存用户信息,切面验证权限后销毁
* @Version: 1.0
*/

@Slf4j
@Component
public class UserContextHolder {

@Resource
EncryptorComponent encryptorComponent;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public static class UserContext {
/**
* 对应user表的id字段
*/
private Integer uid;
/**
* 这里的权限不仅包括permission表中的权限,还包括其他业务权限(例如评审,是否是是该组成员等)
*/
private List<Integer> permissionIds;
}
private final ThreadLocal<UserContext> userContext = new ThreadLocal<>();

public UserContext getUserContext() {
return userContext.get();
}

public void setUserContext(UserContext userContext) {
this.userContext.set(userContext);
}

public void remove() {
this.userContext.remove();
}

public UserContext decrypt(String str) {
return encryptorComponent.decrypt(str, UserContextHolder.UserContext.class);
}

public String encrypt(UserContext userContext) {
return encryptorComponent.encrypt(userContext);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.softeng.dingtalk.component.convertor;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
* @Author: LiXiaoKang
* @CreateTime: 2023-02-08
* @Description: 对象转换器的模版类,实现init方法register特殊字段逻辑就可以使用
* @Version: 1.0
*/

public abstract class AbstractConvertorTemplate<REQ, RESP, ENTITY_PO> implements CommonConvertorInterface<REQ, RESP, ENTITY_PO> {

private final CommonConvertorHelper<REQ, ENTITY_PO> req2entityHelper;
private final CommonConvertorHelper<ENTITY_PO, RESP> entity2respHelper;

public AbstractConvertorTemplate() {
// 被继承后可以获取自身类型参数
Type[] types = ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments();
Class<REQ> reqClass = (Class<REQ>) types[0];
Class<RESP> respClass = (Class<RESP>) types[1];
Class<ENTITY_PO> entityClass = (Class<ENTITY_PO>) types[2];
req2entityHelper = new CommonConvertorHelper<>(reqClass, entityClass);
entity2respHelper = new CommonConvertorHelper<>(entityClass, respClass);
req2EntityLogicRegister(req2entityHelper);
entity2RespLogicRegister(entity2respHelper);
}

/**
* 留四个钩子,在这把四个helper的例外转换逻辑register进去
* 没有特殊逻辑就不用管了
*/
protected void req2EntityLogicRegister(CommonConvertorHelper<REQ, ENTITY_PO> helper) {}
protected void entity2RespLogicRegister(CommonConvertorHelper<ENTITY_PO, RESP> helper) {}


@Override
public ENTITY_PO req2Entity_PO(REQ req) {
return req2entityHelper.convert(req);
}


@Override
public RESP entity_PO2Resp(ENTITY_PO entity) {
return entity2respHelper.convert(entity);
}
}
Loading