diff --git a/src/main/java/cn/zyp/stusystem/controller/LoginController.java b/src/main/java/cn/zyp/stusystem/controller/LoginController.java index bfb116a..a916bd7 100644 --- a/src/main/java/cn/zyp/stusystem/controller/LoginController.java +++ b/src/main/java/cn/zyp/stusystem/controller/LoginController.java @@ -2,9 +2,9 @@ package cn.zyp.stusystem.controller; import cn.dev33.satoken.stp.StpUtil; import cn.zyp.stusystem.common.Result; -import cn.zyp.stusystem.constant.PermissionConstants; import cn.zyp.stusystem.dto.LoginDTO; import cn.zyp.stusystem.entity.User; +import cn.zyp.stusystem.service.RoleService; import cn.zyp.stusystem.service.UserService; import cn.zyp.stusystem.vo.LoginResult; import cn.zyp.stusystem.vo.UserVO; @@ -23,6 +23,9 @@ public class LoginController { @Autowired private UserService userService; + @Autowired + private RoleService roleService; + @PostMapping("/login") public Result login(@RequestBody LoginDTO loginDTO) { // 1. 根据用户名查询用户信息 @@ -36,16 +39,28 @@ public class LoginController { // 3. SaToken登录(自动生成token) StpUtil.login(user.getId()); - // 4. 在Session中存储角色和权限 + // 4. 获取用户权限(从数据库获取,而不是从常量) + List permissions = userService.getUserPermissions(user.getId()); + + // 5. 获取角色ID(如果user中没有roleId,则根据role查找) + Long roleId = user.getRoleId(); + if (roleId == null && user.getRole() != null) { + roleId = roleService.getRoleIdByRoleCode(user.getRole()); + } + + // 6. 在Session中存储角色和权限 StpUtil.getSession().set("role", user.getRole()); - List permissions = PermissionConstants.ROLE_PERMISSIONS.get(user.getRole()); StpUtil.getSession().set("permissions", permissions); + if (roleId != null) { + StpUtil.getSession().set("roleId", roleId); + } - // 5. 构建返回数据 + // 7. 构建返回数据 UserVO userVO = new UserVO(); userVO.setId(user.getId()); userVO.setUsername(user.getUsername()); userVO.setRole(user.getRole()); + userVO.setRoleId(roleId != null ? roleId.toString() : null); // 转换为字符串,前端需要 userVO.setName(user.getName()); userVO.setPermissions(permissions); diff --git a/src/main/java/cn/zyp/stusystem/controller/RolePermissionController.java b/src/main/java/cn/zyp/stusystem/controller/RolePermissionController.java index 60583ee..95706be 100644 --- a/src/main/java/cn/zyp/stusystem/controller/RolePermissionController.java +++ b/src/main/java/cn/zyp/stusystem/controller/RolePermissionController.java @@ -14,24 +14,6 @@ public class RolePermissionController { @Autowired private RolePermissionService rolePermissionService; - - /** - * 获取角色的权限列表 - */ - @GetMapping("/{roleId}/permissions") - public Result> getRolePermissions(@PathVariable Long roleId) { - List permissionCodes = rolePermissionService.getPermissionCodesByRoleId(roleId); - return Result.success(permissionCodes); - } - - /** - * 保存角色的权限配置 - */ - @PostMapping("/{roleId}/permissions") - public Result saveRolePermissions( - @PathVariable Long roleId, - @RequestBody SaveRolePermissionsDTO dto) { - rolePermissionService.saveRolePermissions(roleId, dto.getPermissions()); - return Result.success(true); - } + + } \ No newline at end of file diff --git a/src/main/java/cn/zyp/stusystem/entity/Role.java b/src/main/java/cn/zyp/stusystem/entity/Role.java index 016e338..ab42e03 100644 --- a/src/main/java/cn/zyp/stusystem/entity/Role.java +++ b/src/main/java/cn/zyp/stusystem/entity/Role.java @@ -3,6 +3,7 @@ package cn.zyp.stusystem.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.time.LocalDateTime; @@ -13,9 +14,15 @@ public class Role { @TableId(type = IdType.AUTO) private Long id; - private String roleCode; // 角色代码,如 admin - private String roleName; // 角色名称,如 管理员 - private Integer status; // 状态:1-启用,0-禁用 + private String roleCode; + private String roleName; + private Integer status; + private String remark; + + // 前端期望字段名是 createTime + @JsonProperty("createTime") private LocalDateTime createdAt; + + @JsonProperty("updateTime") private LocalDateTime updatedAt; } \ No newline at end of file diff --git a/src/main/java/cn/zyp/stusystem/service/impl/RolePermissionServiceImpl.java b/src/main/java/cn/zyp/stusystem/service/impl/RolePermissionServiceImpl.java index cffadc9..b9c6933 100644 --- a/src/main/java/cn/zyp/stusystem/service/impl/RolePermissionServiceImpl.java +++ b/src/main/java/cn/zyp/stusystem/service/impl/RolePermissionServiceImpl.java @@ -5,6 +5,7 @@ import cn.zyp.stusystem.mapper.RolePermissionMapper; import cn.zyp.stusystem.service.RolePermissionService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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; @@ -15,7 +16,11 @@ import java.util.stream.Collectors; @Service public class RolePermissionServiceImpl extends ServiceImpl implements RolePermissionService { - + + + @Autowired + private RolePermissionMapper rolePermissionMapper; + @Override public List getPermissionCodesByRoleId(Long roleId) { if (roleId == null) { @@ -52,11 +57,11 @@ public class RolePermissionServiceImpl extends ServiceImpl permissionCodes) { - // 1. 删除该角色的所有现有权限(使用MyBatis-Plus的remove方法) - remove(new LambdaQueryWrapper() - .eq(RolePermission::getRoleId, roleId) - ); - + // 1. 删除该角色的所有权限 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(RolePermission::getRoleId, roleId); + rolePermissionMapper.delete(wrapper); + // 2. 批量插入新权限 if (permissionCodes != null && !permissionCodes.isEmpty()) { List rolePermissions = permissionCodes.stream() @@ -68,8 +73,7 @@ public class RolePermissionServiceImpl extends ServiceImpl implements UserService { + + @Autowired + private RolePermissionService rolePermissionService; + + @Autowired + private RoleService roleService; + @Override public User getByUsername(String username) { - return lambdaQuery().eq(User::getUsername,username).one(); + return lambdaQuery().eq(User::getUsername, username).one(); + } + + @Override + public List getUserPermissions(Long userId) { + // 1. 查询用户信息 + User user = getById(userId); + if (user == null) { + return List.of(); + } + + // 2. 获取角色ID(优先使用roleId,如果没有则根据role查找) + Long roleId = user.getRoleId(); + if (roleId == null && user.getRole() != null) { + roleId = roleService.getRoleIdByRoleCode(user.getRole()); + // 如果找到了roleId,更新到user表(优化后续查询) + if (roleId != null) { + user.setRoleId(roleId); + updateById(user); + } + } + + // 3. 如果还是没有roleId,返回空列表 + if (roleId == null) { + return List.of(); + } + + // 4. 查询该角色的所有权限 + return rolePermissionService.getPermissionCodesByRoleId(roleId); } -} +} \ No newline at end of file diff --git a/src/main/java/cn/zyp/stusystem/vo/UserVO.java b/src/main/java/cn/zyp/stusystem/vo/UserVO.java index 7d8b50d..05833f4 100644 --- a/src/main/java/cn/zyp/stusystem/vo/UserVO.java +++ b/src/main/java/cn/zyp/stusystem/vo/UserVO.java @@ -1,14 +1,14 @@ package cn.zyp.stusystem.vo; import lombok.Data; - import java.util.List; @Data public class UserVO { private Long id; private String username; - private String role; + private String role; // 角色代码,如 admin + private String roleId; // 角色ID(字符串类型,前端需要) private String name; - private List permissions; + private List permissions; // 权限列表 } \ No newline at end of file diff --git a/target/classes/cn/zyp/stusystem/controller/LoginController.class b/target/classes/cn/zyp/stusystem/controller/LoginController.class index d2e96c7..c7ed7d4 100644 Binary files a/target/classes/cn/zyp/stusystem/controller/LoginController.class and b/target/classes/cn/zyp/stusystem/controller/LoginController.class differ diff --git a/target/classes/cn/zyp/stusystem/entity/User.class b/target/classes/cn/zyp/stusystem/entity/User.class index 7300b2f..2434382 100644 Binary files a/target/classes/cn/zyp/stusystem/entity/User.class and b/target/classes/cn/zyp/stusystem/entity/User.class differ diff --git a/target/classes/cn/zyp/stusystem/service/UserService.class b/target/classes/cn/zyp/stusystem/service/UserService.class index d496db4..40a10a0 100644 Binary files a/target/classes/cn/zyp/stusystem/service/UserService.class and b/target/classes/cn/zyp/stusystem/service/UserService.class differ diff --git a/target/classes/cn/zyp/stusystem/service/impl/UserServiceImpl.class b/target/classes/cn/zyp/stusystem/service/impl/UserServiceImpl.class index 49061b7..fff0bf8 100644 Binary files a/target/classes/cn/zyp/stusystem/service/impl/UserServiceImpl.class and b/target/classes/cn/zyp/stusystem/service/impl/UserServiceImpl.class differ diff --git a/target/classes/cn/zyp/stusystem/vo/UserVO.class b/target/classes/cn/zyp/stusystem/vo/UserVO.class index 182317b..a3688d0 100644 Binary files a/target/classes/cn/zyp/stusystem/vo/UserVO.class and b/target/classes/cn/zyp/stusystem/vo/UserVO.class differ