diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/PinnacleApplication.java b/Pinnacle/src/main/java/com/cfive/pinnacle/PinnacleApplication.java index ffd6807..9651843 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/PinnacleApplication.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/PinnacleApplication.java @@ -2,8 +2,10 @@ package com.cfive.pinnacle; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.transaction.annotation.EnableTransactionManagement; @SpringBootApplication +@EnableTransactionManagement public class PinnacleApplication { public static void main(String[] args) { diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/RoleController.java b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/RoleController.java index dcfdb1f..b701c83 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/RoleController.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/RoleController.java @@ -1,7 +1,14 @@ package com.cfive.pinnacle.controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.cfive.pinnacle.entity.Role; +import com.cfive.pinnacle.entity.common.ResponseCode; +import com.cfive.pinnacle.entity.common.ResponseResult; +import com.cfive.pinnacle.service.IRoleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** *

@@ -15,4 +22,45 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/role") public class RoleController { + private IRoleService roleService; + + @Autowired + public void setRoleService(IRoleService roleService) { + this.roleService = roleService; + } + + @GetMapping + public ResponseResult getAllRole() { + List roles = roleService.getAllRole(); + return ResponseResult.build(ResponseCode.DATABASE_SELECT_OK, "success", roles); + } + + @PostMapping + public ResponseResult addRole(@RequestBody Role role) { + if (roleService.addRole(role)) { + return ResponseResult.build(ResponseCode.DATABASE_SAVE_OK, "success", null); + } else { + return ResponseResult.build(ResponseCode.DATABASE_DELETE_ERROR, "error", null); + } + } + + @DeleteMapping("/{id}") + public ResponseResult deleteRole(@PathVariable Long id) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Role::getId, id); + if (roleService.remove(wrapper)) { + return ResponseResult.build(ResponseCode.DATABASE_DELETE_OK, "success", null); + } else { + return ResponseResult.build(ResponseCode.DATABASE_DELETE_ERROR, "error", null); + } + } + + @PutMapping() + public ResponseResult modifyRole(@RequestBody Role role) { + if (roleService.modifyRole(role)) { + return ResponseResult.build(ResponseCode.DATABASE_SAVE_OK, "success", null); + } else { + return ResponseResult.build(ResponseCode.DATABASE_DELETE_ERROR, "error", null); + } + } } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Department.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Department.java index c703931..11533f3 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Department.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Department.java @@ -10,6 +10,8 @@ import java.io.Serial; import java.io.Serializable; import java.util.List; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import lombok.experimental.Accessors; @@ -30,6 +32,7 @@ public class Department implements Serializable { private static final long serialVersionUID = 1L; @TableId("id") + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Group.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Group.java index bea5303..1c64298 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Group.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Group.java @@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.annotation.Version; import java.io.Serial; import java.io.Serializable; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import lombok.experimental.Accessors; @@ -29,6 +31,7 @@ public class Group implements Serializable { private static final long serialVersionUID = 1L; @TableId("id") + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Role.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Role.java index fb0ae46..d1016bc 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Role.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Role.java @@ -8,7 +8,14 @@ import com.baomidou.mybatisplus.annotation.Version; import java.io.Serial; import java.io.Serializable; +import java.util.List; +import com.cfive.pinnacle.entity.permission.Element; +import com.cfive.pinnacle.entity.permission.Menu; +import com.cfive.pinnacle.entity.permission.Operation; +import com.cfive.pinnacle.entity.permission.Power; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import lombok.experimental.Accessors; @@ -29,6 +36,7 @@ public class Role implements Serializable { private static final long serialVersionUID = 1L; @TableId("id") + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** @@ -37,6 +45,18 @@ public class Role implements Serializable { @TableField("name") private String name; + @TableField(exist = false) + private List

menus; + + @TableField(exist = false) + private List elements; + + @TableField(exist = false) + private List operations; + + @TableField(exist = false) + private List powers; + @TableField("deleted") @TableLogic private Integer deleted; diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/RoleGroup.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/RoleGroup.java index 739a322..f3eebca 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/RoleGroup.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/RoleGroup.java @@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.annotation.Version; import java.io.Serial; import java.io.Serializable; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import lombok.experimental.Accessors; @@ -29,18 +31,21 @@ public class RoleGroup implements Serializable { private static final long serialVersionUID = 1L; @TableId("id") + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** * 角色 */ @TableField("role_id") + @JsonSerialize(using = ToStringSerializer.class) private Long roleId; /** * 群组 */ @TableField("group_id") + @JsonSerialize(using = ToStringSerializer.class) private Long groupId; @TableField("deleted") diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Staff.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Staff.java index 3422d6e..5ed20cb 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Staff.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Staff.java @@ -10,6 +10,8 @@ import java.io.Serial; import java.io.Serializable; import java.time.LocalDate; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import lombok.experimental.Accessors; @@ -30,12 +32,14 @@ public class Staff implements Serializable { private static final long serialVersionUID = 1L; @TableId("id") + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** * 用户 */ @TableField("user_id") + @JsonSerialize(using = ToStringSerializer.class) private Long userId; /** diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/User.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/User.java index 64719d3..50bec50 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/User.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/User.java @@ -50,6 +50,7 @@ public class User implements Serializable { * 部门 */ @TableField("department_id") + @JsonSerialize(using = ToStringSerializer.class) private Long departmentId; /** diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/UserGroup.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/UserGroup.java index 9626db7..8589f6b 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/UserGroup.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/UserGroup.java @@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.annotation.Version; import java.io.Serial; import java.io.Serializable; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import lombok.experimental.Accessors; @@ -29,18 +31,21 @@ public class UserGroup implements Serializable { private static final long serialVersionUID = 1L; @TableId("id") + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** * 用户 */ @TableField("user_id") + @JsonSerialize(using = ToStringSerializer.class) private Long userId; /** * 用户组 */ @TableField("group_id") + @JsonSerialize(using = ToStringSerializer.class) private Long groupId; @TableField("deleted") diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/UserRole.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/UserRole.java index 0e04ec8..d46cf46 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/UserRole.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/UserRole.java @@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.annotation.Version; import java.io.Serial; import java.io.Serializable; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import lombok.experimental.Accessors; @@ -29,18 +31,21 @@ public class UserRole implements Serializable { private static final long serialVersionUID = 1L; @TableId("id") + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** * 用户 */ @TableField("user_id") + @JsonSerialize(using = ToStringSerializer.class) private Long userId; /** * 角色 */ @TableField("role_id") + @JsonSerialize(using = ToStringSerializer.class) private Long roleId; @TableField("deleted") diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/UserWork.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/UserWork.java index 450df0b..540a9f8 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/UserWork.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/UserWork.java @@ -31,6 +31,7 @@ public class UserWork implements Serializable { private static final long serialVersionUID = 1L; @TableId("id") + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Work.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Work.java index c8753a2..91a6df2 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Work.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Work.java @@ -47,6 +47,7 @@ public class Work implements Serializable { * 发布者 */ @TableField("publisher_id") + @JsonSerialize(using = ToStringSerializer.class) private Long publisherId; @TableField(exist = false) @@ -82,6 +83,7 @@ public class Work implements Serializable { * 源ID */ @TableField("origin_id") + @JsonSerialize(using = ToStringSerializer.class) private Long originId; @TableField("deleted") diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/Element.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/Element.java index f20a11a..0583062 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/Element.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/Element.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serial; import java.io.Serializable; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -31,6 +33,7 @@ public class Element implements Serializable { private static final long serialVersionUID = 1L; @TableId("id") + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** @@ -43,5 +46,13 @@ public class Element implements Serializable { * 权限ID */ @TableField("power_id") + @JsonSerialize(using = ToStringSerializer.class) private Long powerId; + + /** + * 菜单ID + */ + @TableField("menu_id") + @JsonSerialize(using = ToStringSerializer.class) + private Long menuId; } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/File.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/File.java index bb0da82..2a6057f 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/File.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/File.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serial; import java.io.Serializable; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -31,6 +33,7 @@ public class File implements Serializable { private static final long serialVersionUID = 1L; @TableId("id") + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** @@ -49,5 +52,6 @@ public class File implements Serializable { * 权限ID */ @TableField("power_id") + @JsonSerialize(using = ToStringSerializer.class) private Long powerId; } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/Menu.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/Menu.java index d15cfce..cfe571f 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/Menu.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/Menu.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serial; import java.io.Serializable; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -31,6 +33,7 @@ public class Menu implements Serializable { private static final long serialVersionUID = 1L; @TableId("id") + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** @@ -49,11 +52,13 @@ public class Menu implements Serializable { * 权限ID */ @TableField("power_id") + @JsonSerialize(using = ToStringSerializer.class) private Long powerId; /** * 父ID */ @TableField("parent_id") + @JsonSerialize(using = ToStringSerializer.class) private Long parentId; } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/Operation.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/Operation.java index 76c067d..e4f4ba9 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/Operation.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/Operation.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serial; import java.io.Serializable; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -31,6 +33,7 @@ public class Operation implements Serializable { private static final long serialVersionUID = 1L; @TableId("id") + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** @@ -49,11 +52,20 @@ public class Operation implements Serializable { * 权限ID */ @TableField("power_id") + @JsonSerialize(using = ToStringSerializer.class) private Long powerId; + /** + * 页面元素ID + */ + @TableField("element_id") + @JsonSerialize(using = ToStringSerializer.class) + private Long elementId; + /** * 父ID */ @TableField("parent_id") + @JsonSerialize(using = ToStringSerializer.class) private Long parentId; } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/OperationLog.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/OperationLog.java index 3cc0de0..e68725f 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/OperationLog.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/OperationLog.java @@ -10,6 +10,8 @@ import java.io.Serial; import java.io.Serializable; import java.time.LocalDateTime; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -34,18 +36,21 @@ public class OperationLog implements Serializable { private static final long serialVersionUID = 1L; @TableId("id") + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** * 用户 */ @TableField("user_id") + @JsonSerialize(using = ToStringSerializer.class) private Long userId; /** * 功能 */ @TableField("operation_id") + @JsonSerialize(using = ToStringSerializer.class) private Long operationId; /** diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/Power.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/Power.java index 7ea1a45..f44aace 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/Power.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/Power.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serial; import java.io.Serializable; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -31,11 +33,13 @@ public class Power implements Serializable { private static final long serialVersionUID = 1L; @TableId("id") + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** * 权限类型 */ @TableField("type_id") + @JsonSerialize(using = ToStringSerializer.class) private Long typeId; } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/PowerRole.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/PowerRole.java index c4ecd6b..0eebadd 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/PowerRole.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/PowerRole.java @@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.annotation.Version; import java.io.Serial; import java.io.Serializable; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -33,18 +35,21 @@ public class PowerRole implements Serializable { private static final long serialVersionUID = 1L; @TableId("id") + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** * 权限 */ @TableField("power_id") + @JsonSerialize(using = ToStringSerializer.class) private Long powerId; /** * 角色 */ @TableField("role_id") + @JsonSerialize(using = ToStringSerializer.class) private Long roleId; @TableField("deleted") diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/PowerType.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/PowerType.java index 95581cc..3ddbf15 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/PowerType.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/permission/PowerType.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serial; import java.io.Serializable; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -31,6 +33,7 @@ public class PowerType implements Serializable { private static final long serialVersionUID = 1L; @TableId("id") + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/RoleMapper.java b/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/RoleMapper.java index 5742544..b9eca8f 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/RoleMapper.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/RoleMapper.java @@ -1,8 +1,10 @@ package com.cfive.pinnacle.mapper; +import java.util.List; import com.cfive.pinnacle.entity.Role; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** *

@@ -14,5 +16,7 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface RoleMapper extends BaseMapper { + List getAll(); + Role getOneById(@Param("id") long id); } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/service/IRoleService.java b/Pinnacle/src/main/java/com/cfive/pinnacle/service/IRoleService.java index 78f7396..f0e5482 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/service/IRoleService.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/service/IRoleService.java @@ -3,6 +3,8 @@ package com.cfive.pinnacle.service; import com.cfive.pinnacle.entity.Role; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** *

* 角色 服务类 @@ -12,5 +14,11 @@ import com.baomidou.mybatisplus.extension.service.IService; * @since 2023-04-30 */ public interface IRoleService extends IService { + List getAllRole(); + Role getRole(long id); + + boolean addRole(Role role); + + boolean modifyRole(Role role); } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/RoleServiceImpl.java b/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/RoleServiceImpl.java index cad1073..314ae02 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/RoleServiceImpl.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/RoleServiceImpl.java @@ -1,10 +1,18 @@ package com.cfive.pinnacle.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.cfive.pinnacle.entity.Role; +import com.cfive.pinnacle.entity.permission.PowerRole; import com.cfive.pinnacle.mapper.RoleMapper; +import com.cfive.pinnacle.mapper.permission.PowerRoleMapper; import com.cfive.pinnacle.service.IRoleService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashSet; +import java.util.List; /** *

@@ -17,4 +25,74 @@ import org.springframework.stereotype.Service; @Service public class RoleServiceImpl extends ServiceImpl implements IRoleService { + private RoleMapper roleMapper; + private PowerRoleMapper powerRoleMapper; + + @Autowired + public void setRoleMapper(RoleMapper roleMapper) { + this.roleMapper = roleMapper; + } + + @Autowired + public void setPowerRoleMapper(PowerRoleMapper powerRoleMapper) { + this.powerRoleMapper = powerRoleMapper; + } + + @Override + public List getAllRole() { + return roleMapper.getAll(); + } + + @Override + public Role getRole(long id) { + return roleMapper.getOneById(id); + } + + @Override + @Transactional + public boolean addRole(Role role) { + if (roleMapper.insert(role) == 1) { + role.getPowers().forEach(power -> { + PowerRole powerRole = new PowerRole(); + powerRole.setRoleId(role.getId()); + powerRole.setPowerId(power.getId()); + if (powerRoleMapper.insert(powerRole) != 1) { + throw new RuntimeException("Add power_role failure"); + } + }); + return true; + } else { + throw new RuntimeException("Add role failure"); + } + } + + @Override + @Transactional + public boolean modifyRole(Role role) { + roleMapper.updateById(role); + Role originalRole = getRole(role.getId()); + HashSet originalPowerIds = new HashSet<>(); + originalRole.getMenus().forEach(menu -> originalPowerIds.add(menu.getPowerId())); + originalRole.getElements().forEach(element -> originalPowerIds.add(element.getPowerId())); + originalRole.getOperations().forEach(operation -> originalPowerIds.add(operation.getPowerId())); + HashSet newPowerIds = new HashSet<>(); + role.getPowers().forEach(power -> newPowerIds.add(power.getId())); + HashSet deletePowerIds = new HashSet<>(originalPowerIds); + deletePowerIds.removeAll(newPowerIds); + HashSet addPowerIds = new HashSet<>(newPowerIds); + addPowerIds.removeAll(originalPowerIds); + deletePowerIds.forEach(deletePowerId -> { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(PowerRole::getRoleId, role.getId()) + .eq(PowerRole::getPowerId, deletePowerId); + powerRoleMapper.delete(wrapper); + }); + addPowerIds.forEach(addPowerId -> { + PowerRole powerRole = new PowerRole(); + powerRole.setRoleId(role.getId()); + powerRole.setPowerId(addPowerId); + powerRoleMapper.insert(powerRole); + }); + return true; + } } diff --git a/Pinnacle/src/main/resources/mapper/RoleMapper.xml b/Pinnacle/src/main/resources/mapper/RoleMapper.xml index 0b596a5..2648c91 100644 --- a/Pinnacle/src/main/resources/mapper/RoleMapper.xml +++ b/Pinnacle/src/main/resources/mapper/RoleMapper.xml @@ -2,4 +2,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pinnacle/src/test/java/com/cfive/pinnacle/PinnacleApplicationTests.java b/Pinnacle/src/test/java/com/cfive/pinnacle/PinnacleApplicationTests.java index 579f237..e32eba8 100644 --- a/Pinnacle/src/test/java/com/cfive/pinnacle/PinnacleApplicationTests.java +++ b/Pinnacle/src/test/java/com/cfive/pinnacle/PinnacleApplicationTests.java @@ -1,5 +1,6 @@ package com.cfive.pinnacle; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @@ -10,4 +11,10 @@ class PinnacleApplicationTests { void contextLoads() { } + @Test + void generateId() { + for (int i = 0; i < 10; i++) { + System.out.println(IdWorker.getId()); + } + } } diff --git a/sql/Insert.sql b/sql/Insert.sql index 7753840..218baa6 100644 --- a/sql/Insert.sql +++ b/sql/Insert.sql @@ -1,4 +1,4 @@ -SET FOREIGN_KEY_CHECKS=0; +SET FOREIGN_KEY_CHECKS = 0; truncate t_menu; truncate t_element; @@ -7,54 +7,99 @@ truncate t_operation_log; truncate t_operation; truncate t_power; truncate t_power_type; +truncate t_role; +truncate t_power_role; insert into t_power_type (id, name) -values (1, 'operation'), - (2, 'menu'), - (3, 'element'), - (4, 'file'); +values (1, 'menu'), + (2, 'element'), + (3, 'operation'); begin; insert into t_power (type_id) values (1); -insert into t_operation (name, code, power_id, parent_id) -values ('Select All Power Type', 'system:power_type:all', last_insert_id(), null); +insert into t_menu (id, name, url, power_id, parent_id) +VALUES (1, '公用', '/', last_insert_id(), null); commit; - begin; insert into t_power (type_id) -values (1); -insert into t_operation (name, code, power_id, parent_id) -values ('Select All Power', 'system:power:all', last_insert_id(), null); +values (2); +insert into t_element(id, name, power_id, menu_id) +VALUES (1, '公用', last_insert_id(), 1); +commit; + +begin; +insert into t_power(type_id) +values (3); +insert into t_operation(name, code, power_id, element_id, parent_id) +VALUES ('查询当前用户权限', 'common:power:self', last_insert_id(), 1, null); +commit; + +begin; +insert into t_power(type_id) +values (3); +insert into t_operation(name, code, power_id, element_id, parent_id) +VALUES ('查询当前用户信息', 'common:info:self', last_insert_id(), 1, null); commit; begin; insert into t_power (type_id) values (1); -insert into t_operation (name, code, power_id, parent_id) -values ('Select All User', 'system:operation:all', last_insert_id(), null); +insert into t_menu (id, name, url, power_id, parent_id) +VALUES (2, '角色管理', '/system/role', last_insert_id(), null); commit; begin; insert into t_power (type_id) -values (1); -insert into t_operation (name, code, power_id, parent_id) -values ('Select All User', 'system:menu:all', last_insert_id(), null); +values (2); +insert into t_element (id, name, power_id, menu_id) +VALUES (2, '角色列表', last_insert_id(), 2); commit; begin; insert into t_power (type_id) -values (1); -insert into t_operation (name, code, power_id, parent_id) -values ('Select All User', 'system:element:all', last_insert_id(), null); +values (3); +insert into t_operation (name, code, power_id, element_id, parent_id) +VALUES ('查询所有权限', 'system:power:all', last_insert_id(), 2, null); commit; begin; insert into t_power (type_id) -values (1); -insert into t_operation (name, code, power_id, parent_id) -values ('Select All User', 'system:file:all', last_insert_id(), null); +values (3); +insert into t_operation (name, code, power_id, element_id, parent_id) +VALUES ('查询所有角色', 'system:role:all', last_insert_id(), 2, null); commit; -SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file +begin; +insert into t_power (type_id) +values (3); +insert into t_operation (name, code, power_id, element_id, parent_id) +VALUES ('查询所有用户', 'system:user:all', last_insert_id(), 2, null); +commit; + +insert into t_role (id, name) +values (1655784840189972481, '员工'), + (1655784928056467457, '组长'), + (1655785102375940097, '主管'), + (1655785102375940098, '总管'); + +insert into t_power_role(id, power_id, role_id) +VALUES (1656219345971326978, 1, 1655784840189972481), + (1656219345971326979, 2, 1655784840189972481), + (1656219345971326980, 3, 1655784840189972481), + (1656219345971326981, 4, 1655784840189972481), + (1656219345971326982, 5, 1655785102375940098), + (1656219345971326983, 6, 1655785102375940098), + (1656219345971326984, 7, 1655785102375940098), + (1656219345971326985, 8, 1655785102375940098), + (1656219345971326986, 9, 1655785102375940098); + +select * from t_role +left join t_power_role tpr on t_role.id = tpr.role_id +left join t_power tp on tp.id = tpr.power_id +left join t_menu tm on tp.id = tm.power_id +left join t_element te on tp.id = te.power_id +left join t_operation t on tp.id = t.power_id; + +SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file diff --git a/sql/init.sql b/sql/init.sql index 6bcfaa7..bd49cb6 100644 --- a/sql/init.sql +++ b/sql/init.sql @@ -52,7 +52,9 @@ create table `t_element` `id` bigint not null primary key auto_increment, `name` varchar(100) not null comment '元素名', `power_id` bigint not null comment '权限ID', - constraint t_element_power_id_fk foreign key (power_id) references t_power (id) + `menu_id` bigint not null comment '菜单ID', + constraint t_element_power_id_fk foreign key (power_id) references t_power (id), + constraint t_element_menu_id_fk foreign key (menu_id) references t_menu (id) ) comment '页面元素'; create table `t_file` @@ -66,12 +68,14 @@ create table `t_file` create table `t_operation` ( - `id` bigint not null primary key auto_increment, - `name` varchar(50) not null comment '功能名', - `code` varchar(50) null comment '功能编码', - `power_id` bigint not null comment '权限ID', - `parent_id` bigint null comment '父ID', - constraint t_operation_power_id_fk foreign key (power_id) references t_power (id) + `id` bigint not null primary key auto_increment, + `name` varchar(50) not null comment '功能名', + `code` varchar(50) null comment '功能编码', + `power_id` bigint not null comment '权限ID', + `parent_id` bigint null comment '父ID', + `element_id` bigint not null comment '页面元素ID', + constraint t_operation_power_id_fk foreign key (power_id) references t_power (id), + constraint t_operation_element_id_fk foreign key (element_id) references t_element (id) ) comment '功能'; create table `t_department` diff --git a/ui/src/assets/svg/plus.svg b/ui/src/assets/svg/plus.svg new file mode 100644 index 0000000..7eba734 --- /dev/null +++ b/ui/src/assets/svg/plus.svg @@ -0,0 +1,3 @@ + + \ No newline at end of file diff --git a/ui/src/assets/svg/refresh.svg b/ui/src/assets/svg/refresh.svg new file mode 100644 index 0000000..9ed6231 --- /dev/null +++ b/ui/src/assets/svg/refresh.svg @@ -0,0 +1,3 @@ + + \ No newline at end of file diff --git a/ui/src/assets/svg/setting.svg b/ui/src/assets/svg/setting.svg new file mode 100644 index 0000000..c6c772a --- /dev/null +++ b/ui/src/assets/svg/setting.svg @@ -0,0 +1,3 @@ + + \ No newline at end of file diff --git a/ui/src/main.ts b/ui/src/main.ts index 4944fd4..24e1a4e 100644 --- a/ui/src/main.ts +++ b/ui/src/main.ts @@ -6,6 +6,7 @@ import '@/assets/css/base.css' import '@/assets/css/common.css' import 'element-plus/theme-chalk/el-message.css' +import 'element-plus/theme-chalk/el-message-box.css' import { createPinia } from 'pinia' const app = createApp(App) diff --git a/ui/src/pages/system/RoleManagement.vue b/ui/src/pages/system/RoleManagement.vue new file mode 100644 index 0000000..33e86dc --- /dev/null +++ b/ui/src/pages/system/RoleManagement.vue @@ -0,0 +1,307 @@ + + + + + diff --git a/ui/src/router/index.ts b/ui/src/router/index.ts index 674cbc6..b0d5211 100644 --- a/ui/src/router/index.ts +++ b/ui/src/router/index.ts @@ -179,30 +179,30 @@ const router = createRouter({ } } ] + }, + { + path: '/system', + name: 'systemManagement', + children: [ + { + path: 'role', + name: 'systemRole', + component: async () => + await import('@/pages/system/RoleManagement.vue'), + meta: { + title: '角色管理', + requiresScrollbar: false, + requiresPadding: true + } + } + ], + meta: { + title: '系统管理', + icon: shallowRef(IconPinnacleSetting), + requiresScrollbar: false, + requiresPadding: true + } } - // { - // path: '/system', - // name: 'systemManagement', - // children: [ - // { - // path: 'role', - // name: 'systemRole', - // component: async () => - // await import('@/pages/system/RoleManagement.vue'), - // meta: { - // title: '角色管理', - // requiresScrollbar: false, - // requiresPadding: true - // } - // } - // ], - // meta: { - // title: '系统管理', - // icon: shallowRef(IconPinnacleSetting), - // requiresScrollbar: false, - // requiresPadding: true - // } - // } ] }, {