From ee47776b0efbc1ddfdab4a0da31efd01d56f118a Mon Sep 17 00:00:00 2001 From: Glaxky <191250075@smail.nju.edu.cn> Date: Mon, 6 Feb 2023 21:33:26 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=94=A8=E6=88=B7=E6=9D=83?= =?UTF-8?q?=E9=99=90=E3=80=81=E8=BA=AB=E4=BB=BD=E3=80=81=E7=BB=84=E5=85=B3?= =?UTF-8?q?=E7=B3=BB=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dingtalk/controller/UserController.java | 20 ++++++- .../softeng/dingtalk/entity/Permission.java | 31 +++++++++++ .../com/softeng/dingtalk/entity/Team.java | 29 ++++++++++ .../com/softeng/dingtalk/entity/User.java | 11 ++++ .../dingtalk/entity/UserPermission.java | 31 +++++++++++ .../entity/UserPermissionAssociatePK.java | 38 +++++++++++++ .../com/softeng/dingtalk/entity/UserTeam.java | 32 +++++++++++ .../dingtalk/entity/UserTeamAssociatePK.java | 38 +++++++++++++ .../com/softeng/dingtalk/enums/Position.java | 9 ++- .../repository/PermissionRepository.java | 16 ++++++ .../dingtalk/repository/TeamRepository.java | 15 +++++ .../repository/UserPermissionRepository.java | 23 ++++++++ .../repository/UserTeamRepository.java | 24 ++++++++ .../softeng/dingtalk/service/UserService.java | 55 ++++++++++++++++++- src/main/resources/newTable.sql | 37 +++++++++++++ 15 files changed, 404 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/softeng/dingtalk/entity/Permission.java create mode 100644 src/main/java/com/softeng/dingtalk/entity/Team.java create mode 100644 src/main/java/com/softeng/dingtalk/entity/UserPermission.java create mode 100644 src/main/java/com/softeng/dingtalk/entity/UserPermissionAssociatePK.java create mode 100644 src/main/java/com/softeng/dingtalk/entity/UserTeam.java create mode 100644 src/main/java/com/softeng/dingtalk/entity/UserTeamAssociatePK.java create mode 100644 src/main/java/com/softeng/dingtalk/repository/PermissionRepository.java create mode 100644 src/main/java/com/softeng/dingtalk/repository/TeamRepository.java create mode 100644 src/main/java/com/softeng/dingtalk/repository/UserPermissionRepository.java create mode 100644 src/main/java/com/softeng/dingtalk/repository/UserTeamRepository.java create mode 100644 src/main/resources/newTable.sql diff --git a/src/main/java/com/softeng/dingtalk/controller/UserController.java b/src/main/java/com/softeng/dingtalk/controller/UserController.java index 79304a07..6ea47c14 100644 --- a/src/main/java/com/softeng/dingtalk/controller/UserController.java +++ b/src/main/java/com/softeng/dingtalk/controller/UserController.java @@ -33,7 +33,6 @@ public class UserController { UserService userService; @Autowired NotifyService notifyService; - @Autowired BaseApi baseApi; @@ -131,5 +130,24 @@ public void downloadLeaseContract(@RequestAttribute int uid, HttpServletResponse userService.downloadContractFile(uid,response); } + /** + * @author LiXiaoKang + * @description 新增获取用户权限与所属组信息 + * @create 1/10/2020 8:38 PM + */ + + /** + * 获取用户权限信息 + * @param uid + * @return + */ + @GetMapping("/user/permission") + public List getPermissions(@RequestAttribute int uid){ + return userService.getPermissionNames(uid); + } + @GetMapping("/user/team") + public List getTeams(@RequestAttribute int uid){ + return userService.getTeams(uid); + } } diff --git a/src/main/java/com/softeng/dingtalk/entity/Permission.java b/src/main/java/com/softeng/dingtalk/entity/Permission.java new file mode 100644 index 00000000..d3cba869 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/entity/Permission.java @@ -0,0 +1,31 @@ +package com.softeng.dingtalk.entity; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +/** + * @author LiXiaoKang + * @description 用户权限类 + * @date 02/02/2023 + */ +@Getter +@Setter +@Entity +@NoArgsConstructor +@ToString +public class Permission { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + + private String name; + + private String description; +} diff --git a/src/main/java/com/softeng/dingtalk/entity/Team.java b/src/main/java/com/softeng/dingtalk/entity/Team.java new file mode 100644 index 00000000..3ef1da7f --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/entity/Team.java @@ -0,0 +1,29 @@ +package com.softeng.dingtalk.entity; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +/** + * @author LiXiaoKang + * @description 用户组实体类 + * @date 02/02/2023 + */ +@Getter +@Setter +@Entity +@NoArgsConstructor +@ToString +public class Team { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + + private String name; +} diff --git a/src/main/java/com/softeng/dingtalk/entity/User.java b/src/main/java/com/softeng/dingtalk/entity/User.java index 512519e3..77f6863f 100644 --- a/src/main/java/com/softeng/dingtalk/entity/User.java +++ b/src/main/java/com/softeng/dingtalk/entity/User.java @@ -159,6 +159,17 @@ public class User { @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE) private List allPrizes; + /** + * @author LiXiaoKang + * @description todo-用户权限重构 + * @date 2/3/2023 + */ + + /** + * 用户权限id(代替authority) + */ + private int permissionId; + public User(String userid, String unionid, String name, String avatar, int authority, Position position) { this.userid = userid; diff --git a/src/main/java/com/softeng/dingtalk/entity/UserPermission.java b/src/main/java/com/softeng/dingtalk/entity/UserPermission.java new file mode 100644 index 00000000..76879fc7 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/entity/UserPermission.java @@ -0,0 +1,31 @@ +package com.softeng.dingtalk.entity; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.IdClass; + +/** + * @author LiXiaoKang + * @description 用户-用户权限实体类 + * @date 02/02/2023 + */ +@Getter +@Setter +@Entity +@NoArgsConstructor +@ToString +// 设置联合主键的注解 +@IdClass(UserPermissionAssociatePK.class) +public class UserPermission { + + @Id + private int userId; + + @Id + private int permissionId; +} diff --git a/src/main/java/com/softeng/dingtalk/entity/UserPermissionAssociatePK.java b/src/main/java/com/softeng/dingtalk/entity/UserPermissionAssociatePK.java new file mode 100644 index 00000000..7241237e --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/entity/UserPermissionAssociatePK.java @@ -0,0 +1,38 @@ +package com.softeng.dingtalk.entity; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + * @author LiXiaoKang + * @description 用户-权限实体类的联合主键 + * @date 02/02/2023 + */ + +@Getter +@Setter +@NoArgsConstructor +@ToString +public class UserPermissionAssociatePK implements Serializable { + + private int userId; + + private int permissionId; + + @Override + public boolean equals(Object obj){ + if(obj instanceof UserPermissionAssociatePK){ + return userId == ((UserPermissionAssociatePK) obj).userId && permissionId == ((UserPermissionAssociatePK) obj).getPermissionId(); + } + return false; + } + + @Override + public int hashCode(){ + return userId+permissionId; + } +} diff --git a/src/main/java/com/softeng/dingtalk/entity/UserTeam.java b/src/main/java/com/softeng/dingtalk/entity/UserTeam.java new file mode 100644 index 00000000..3a39482a --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/entity/UserTeam.java @@ -0,0 +1,32 @@ +package com.softeng.dingtalk.entity; + + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.IdClass; + +/** + * @author LiXiaoKang + * @description 用户组实体类 + * @date 02/02/2023 + */ +@Getter +@Setter +@Entity +@NoArgsConstructor +@ToString +// 设置联合主键的注解 +@IdClass(UserTeamAssociatePK.class) +public class UserTeam { + + @Id + private int userId; + + @Id + private int teamId; +} diff --git a/src/main/java/com/softeng/dingtalk/entity/UserTeamAssociatePK.java b/src/main/java/com/softeng/dingtalk/entity/UserTeamAssociatePK.java new file mode 100644 index 00000000..79539458 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/entity/UserTeamAssociatePK.java @@ -0,0 +1,38 @@ +package com.softeng.dingtalk.entity; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + * @author LiXiaoKang + * @description 用户-用户组实体类的联合主键 + * @date 02/02/2023 + */ + +@Getter +@Setter +@NoArgsConstructor +@ToString +public class UserTeamAssociatePK implements Serializable { + + private int userId; + + private int teamId; + + @Override + public boolean equals(Object obj){ + if(obj instanceof UserTeamAssociatePK){ + return userId == ((UserTeamAssociatePK) obj).userId && teamId == ((UserTeamAssociatePK) obj).getTeamId(); + } + return false; + } + + @Override + public int hashCode(){ + return userId+teamId; + } +} diff --git a/src/main/java/com/softeng/dingtalk/enums/Position.java b/src/main/java/com/softeng/dingtalk/enums/Position.java index c5abba72..5ee22b89 100644 --- a/src/main/java/com/softeng/dingtalk/enums/Position.java +++ b/src/main/java/com/softeng/dingtalk/enums/Position.java @@ -13,7 +13,14 @@ public enum Position { ACADEMIC("学硕"), PROFESSIONAL("专硕"), UNDERGRADUATE("本科生"), - OTHER("待定"); + OTHER("待定"), + + /** + * @author LiXiaoKang + * @description todo-新增职位/学位 + * @create 2/4/2023 + */ + TEACHER("教师"); private String title; diff --git a/src/main/java/com/softeng/dingtalk/repository/PermissionRepository.java b/src/main/java/com/softeng/dingtalk/repository/PermissionRepository.java new file mode 100644 index 00000000..f3fdf949 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/repository/PermissionRepository.java @@ -0,0 +1,16 @@ +package com.softeng.dingtalk.repository; + +import com.softeng.dingtalk.entity.Permission; +import org.springframework.stereotype.Repository; + +/** + * @author LiXiaoKang + * @description 操作Permission实体类的接口 + * @date 2/5/2023 + */ + +@Repository +public interface PermissionRepository extends CustomizedRepository{ + + Permission findById(int id); +} diff --git a/src/main/java/com/softeng/dingtalk/repository/TeamRepository.java b/src/main/java/com/softeng/dingtalk/repository/TeamRepository.java new file mode 100644 index 00000000..45130d33 --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/repository/TeamRepository.java @@ -0,0 +1,15 @@ +package com.softeng.dingtalk.repository; + +import com.softeng.dingtalk.entity.Team; +import org.springframework.stereotype.Repository; + +/** + * @author LiXiaoKang + * @description 操作Team实体类的接口 + * @date 2/5/2023 + */ + +@Repository +public interface TeamRepository extends CustomizedRepository{ + Team findById(int id); +} diff --git a/src/main/java/com/softeng/dingtalk/repository/UserPermissionRepository.java b/src/main/java/com/softeng/dingtalk/repository/UserPermissionRepository.java new file mode 100644 index 00000000..aa0fe23d --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/repository/UserPermissionRepository.java @@ -0,0 +1,23 @@ +package com.softeng.dingtalk.repository; + +import com.softeng.dingtalk.entity.UserPermission; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author LiXiaoKang + * @description 操作UserPermission实体类的接口 + * @date 2/5/2023 + */ + +@Repository +public interface UserPermissionRepository extends CustomizedRepository{ + + /** + * 获取用户的所有权限 + * @param userId 用户id + * @return 用户所有权限 + */ + List findAllByUserId(int userId); +} diff --git a/src/main/java/com/softeng/dingtalk/repository/UserTeamRepository.java b/src/main/java/com/softeng/dingtalk/repository/UserTeamRepository.java new file mode 100644 index 00000000..8ca7071d --- /dev/null +++ b/src/main/java/com/softeng/dingtalk/repository/UserTeamRepository.java @@ -0,0 +1,24 @@ +package com.softeng.dingtalk.repository; + +import com.softeng.dingtalk.entity.UserTeam; +import com.softeng.dingtalk.entity.UserTeamAssociatePK; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author LiXiaoKang + * @description 操作UserTeam实体类的接口 + * @date 2/5/2023 + */ + +@Repository +public interface UserTeamRepository extends CustomizedRepository{ + + /** + * 获取用户所在的所有用户组 + * @param userId 用户id + * @return 用户所在的所有用户组 + */ + List findAllByUserId(int userId); +} diff --git a/src/main/java/com/softeng/dingtalk/service/UserService.java b/src/main/java/com/softeng/dingtalk/service/UserService.java index 8091a76b..402bb713 100644 --- a/src/main/java/com/softeng/dingtalk/service/UserService.java +++ b/src/main/java/com/softeng/dingtalk/service/UserService.java @@ -2,12 +2,12 @@ import com.softeng.dingtalk.api.BaseApi; import com.softeng.dingtalk.encryption.Encryption; -import com.softeng.dingtalk.entity.User; -import com.softeng.dingtalk.repository.AcRecordRepository; -import com.softeng.dingtalk.repository.UserRepository; +import com.softeng.dingtalk.entity.*; +import com.softeng.dingtalk.repository.*; import com.softeng.dingtalk.vo.UserInfoVO; import com.softeng.dingtalk.vo.UserVO; import lombok.extern.slf4j.Slf4j; +import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -38,6 +38,20 @@ public class UserService { @Autowired Encryption encryption; + /** + * @author LiXiaoKang + * @description 新增用用户权限、用户组相关注入 + * @date 2/5/2023 + */ + @Autowired + private PermissionRepository permissionRepository; + @Autowired + private TeamRepository teamRepository; + @Autowired + private UserPermissionRepository userPermissionRepository; + @Autowired + private UserTeamRepository userTeamRepository; + @Value("${file.userLeaseContractFilePath}") private String userLeaseContractFilePath; /** @@ -157,4 +171,39 @@ public void downloadContractFile(int uid, HttpServletResponse httpServletRespons fileService.downloadFile(fileName,filePath,httpServletResponse); } + /** + * @author LiXiaoKang + * @description 新增用用户权限、用户组相关service层方法 + * @date 2/5/2023 + */ + + /** + * 获得该用户的所有权限名 + * @param userId + * @return 所有权限名 + */ + public List getPermissionNames(int userId){ + List permissionList= new ArrayList<>(); + List userPermissionList= userPermissionRepository.findAllByUserId(userId); + for (UserPermission userPermission: userPermissionList) { + Permission permission = permissionRepository.findById(userPermission.getPermissionId()); + permissionList.add(permission.getName()); + } + return permissionList; + } + + /** + * 获得该用户所在的所有用户组名 + * @param userId + * @return + */ + public List getTeams(int userId){ + List teamList= new ArrayList<>(); + List userTeamList= userTeamRepository.findAllByUserId(userId); + for (UserTeam userTeam: userTeamList) { + Team team = teamRepository.findById(userTeam.getTeamId()); + teamList.add(team.getName()); + } + return teamList; + } } diff --git a/src/main/resources/newTable.sql b/src/main/resources/newTable.sql new file mode 100644 index 00000000..37dc6725 --- /dev/null +++ b/src/main/resources/newTable.sql @@ -0,0 +1,37 @@ +use dingtalk; + +#-------------------- 用户模块新增的表 -----------------------# +drop table if exists team; +create table `team` +( + id int primary key AUTO_INCREMENT comment '组id', + name char(20) not null comment '组名' +) comment '用户组表'; + +drop table if exists permission; +create table `permission` +( + id int primary key AUTO_INCREMENT comment '权限id', + name char(20) not null comment '权限名', + description char(100) not null comment '权限描述' +) comment '权限表'; + +drop table if exists user_permission; +create table `user_permission` +( + user_id int not null comment '用户id', + permission_id int not null comment '权限id', + primary key (user_id, permission_id), + foreign key (user_id) references user (id), + foreign key (permission_id) references permission (id) +); + +drop table if exists user_team; +create table `user_team` +( + user_id int not null comment '用户id', + team_id int not null comment '组id', + primary key (user_id, team_id), + foreign key (user_id) references user (id), + foreign key (team_id) references team (id) +) comment '用户与组关系表';