Compare commits

...

2 Commits

Author SHA1 Message Date
ca14774891 修改用户角色,添加管理员相关逻辑
Some checks failed
构建并部署 Spring Boot 应用 / build-and-deploy (push) Failing after 9m4s
2025-10-17 02:17:28 +08:00
349cc22069 修改用户角色,添加管理员相关逻辑 2025-10-17 02:16:14 +08:00
5 changed files with 334 additions and 0 deletions

View File

@@ -0,0 +1,138 @@
package com.light.delivery.controller;
import com.light.delivery.model.Employee;
import com.light.delivery.model.User;
import com.light.delivery.model.UserRole;
import com.light.delivery.service.EmployeeService;
import com.light.delivery.service.UserService;
import com.light.delivery.service.impl.UserServiceImpl;
import com.light.delivery.util.JwtUtil;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 员工管理控制器,提供员工信息的增删改查功能。
* 仅限管理员角色访问。
*/
@RestController
@RequestMapping("/employees")
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
@Autowired
private UserService userService;
@Autowired
private JwtUtil jwtUtil;
@Autowired
private UserServiceImpl userServiceImpl;
/**
* 获取所有员工列表
* @return 员工信息列表
*/
@GetMapping
public ResponseEntity<?> getAllEmployees(HttpServletRequest request) {
try {
User user = getUserFromToken(request);
UserRole userRole = userServiceImpl.getUserRole(user);
if (!UserRole.ADMIN.equals(userRole)) {
return ResponseEntity.status(403).body("权限不足,仅管理员可访问");
}
List<Employee> employees = employeeService.getAllEmployees();
return ResponseEntity.ok(employees);
} catch (Exception e) {
return ResponseEntity.status(401).body("认证失败: " + e.getMessage());
}
}
/**
* 添加新员工
* @param employee 员工信息
* @return 添加结果
*/
@PostMapping
public ResponseEntity<?> addEmployee(@RequestBody Employee employee, HttpServletRequest request) {
try {
User user = getUserFromToken(request);
UserRole userRole = userServiceImpl.getUserRole(user);
if (!UserRole.ADMIN.equals(userRole)) {
return ResponseEntity.status(403).body("权限不足,仅管理员可访问");
}
Employee savedEmployee = employeeService.saveEmployee(employee);
return ResponseEntity.ok(savedEmployee);
} catch (Exception e) {
return ResponseEntity.status(401).body("认证失败: " + e.getMessage());
}
}
/**
* 更新员工信息
* @param id 员工ID
* @param employee 员工信息
* @return 更新结果
*/
@PutMapping("/{id}")
public ResponseEntity<?> updateEmployee(@PathVariable Long id, @RequestBody Employee employee, HttpServletRequest request) {
try {
User user = getUserFromToken(request);
UserRole userRole = userServiceImpl.getUserRole(user);
if (!UserRole.ADMIN.equals(userRole)) {
return ResponseEntity.status(403).body("权限不足,仅管理员可访问");
}
Employee updatedEmployee = employeeService.updateEmployee(id, employee);
if (updatedEmployee == null) {
return ResponseEntity.status(404).body("员工不存在");
}
return ResponseEntity.ok(updatedEmployee);
} catch (Exception e) {
return ResponseEntity.status(401).body("认证失败: " + e.getMessage());
}
}
/**
* 删除员工
* @param id 员工ID
* @return 删除结果
*/
@DeleteMapping("/{id}")
public ResponseEntity<?> deleteEmployee(@PathVariable Long id, HttpServletRequest request) {
try {
User user = getUserFromToken(request);
UserRole userRole = userServiceImpl.getUserRole(user);
if (!UserRole.ADMIN.equals(userRole)) {
return ResponseEntity.status(403).body("权限不足,仅管理员可访问");
}
employeeService.deleteEmployee(id);
return ResponseEntity.ok("员工删除成功");
} catch (Exception e) {
return ResponseEntity.status(401).body("认证失败: " + e.getMessage());
}
}
/**
* 从请求中提取用户信息
* @param request HTTP请求
* @return 用户对象
*/
private User getUserFromToken(HttpServletRequest request) {
String bearerToken = request.getHeader("Authorization");
if (bearerToken != null && bearerToken.startsWith("Bearer ")) {
String token = bearerToken.substring(7);
String openid = jwtUtil.extractUsername(token);
return userService.getUserInfo(token);
}
throw new IllegalArgumentException("Authorization token is missing");
}
}

View File

@@ -0,0 +1,15 @@
package com.light.delivery.dto;
import lombok.Data;
/**
* 员工信息DTO用于员工信息的传输
*/
@Data
public class EmployeeDto {
private Long id;
private String name;
private String phone;
private String role;
private String openid;
}

View File

@@ -0,0 +1,49 @@
package com.light.delivery.exception;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import java.util.HashMap;
import java.util.Map;
/**
* 全局异常处理器,用于统一处理系统中的异常
*/
@ControllerAdvice
public class GlobalExceptionHandler {
/**
* 处理权限不足异常
*/
@ExceptionHandler(SecurityException.class)
public ResponseEntity<Map<String, String>> handleSecurityException(SecurityException e) {
Map<String, String> errorResponse = new HashMap<>();
errorResponse.put("error", "权限不足");
errorResponse.put("message", e.getMessage());
return ResponseEntity.status(HttpStatus.FORBIDDEN).body(errorResponse);
}
/**
* 处理非法参数异常
*/
@ExceptionHandler(IllegalArgumentException.class)
public ResponseEntity<Map<String, String>> handleIllegalArgumentException(IllegalArgumentException e) {
Map<String, String> errorResponse = new HashMap<>();
errorResponse.put("error", "参数错误");
errorResponse.put("message", e.getMessage());
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorResponse);
}
/**
* 处理通用异常
*/
@ExceptionHandler(Exception.class)
public ResponseEntity<Map<String, String>> handleGenericException(Exception e) {
Map<String, String> errorResponse = new HashMap<>();
errorResponse.put("error", "系统错误");
errorResponse.put("message", e.getMessage());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse);
}
}

View File

@@ -0,0 +1,52 @@
package com.light.delivery.service;
import com.light.delivery.dto.EmployeeDto;
import com.light.delivery.model.Employee;
import java.util.List;
/**
* 员工服务接口,定义员工相关的业务操作。
*/
public interface EmployeeService {
/**
* 获取所有员工信息
* @return 员工列表
*/
List<Employee> getAllEmployees();
/**
* 保存员工信息
* @param employee 员工信息
* @return 保存后的员工信息
*/
Employee saveEmployee(Employee employee);
/**
* 更新员工信息
* @param id 员工ID
* @param employee 员工信息
* @return 更新后的员工信息
*/
Employee updateEmployee(Long id, Employee employee);
/**
* 删除员工
* @param id 员工ID
*/
void deleteEmployee(Long id);
/**
* 将Employee实体转换为EmployeeDto
* @param employee 员工实体
* @return 员工DTO
*/
EmployeeDto toDto(Employee employee);
/**
* 将EmployeeDto转换为Employee实体
* @param dto 员工DTO
* @return 员工实体
*/
Employee toEntity(EmployeeDto dto);
}

View File

@@ -0,0 +1,80 @@
package com.light.delivery.service.impl;
import com.light.delivery.dto.EmployeeDto;
import com.light.delivery.model.Employee;
import com.light.delivery.repository.EmployeeRepository;
import com.light.delivery.service.EmployeeService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* 员工服务实现类,处理员工相关的业务逻辑。
*/
@Service
public class EmployeeServiceImpl implements EmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
@Override
public List<Employee> getAllEmployees() {
return employeeRepository.findAll();
}
@Override
public Employee saveEmployee(Employee employee) {
return employeeRepository.save(employee);
}
@Override
public Employee updateEmployee(Long id, Employee employee) {
Optional<Employee> existingEmployee = employeeRepository.findById(id);
if (existingEmployee.isPresent()) {
Employee emp = existingEmployee.get();
emp.setName(employee.getName());
emp.setPhone(employee.getPhone());
emp.setRole(employee.getRole());
// 注意不更新openid字段该字段由用户注册时自动填充
return employeeRepository.save(emp);
}
return null;
}
@Override
public void deleteEmployee(Long id) {
employeeRepository.deleteById(id);
}
/**
* 将Employee实体转换为EmployeeDto
* @param employee 员工实体
* @return 员工DTO
*/
public EmployeeDto toDto(Employee employee) {
if (employee == null) {
return null;
}
EmployeeDto dto = new EmployeeDto();
BeanUtils.copyProperties(employee, dto);
return dto;
}
/**
* 将EmployeeDto转换为Employee实体
* @param dto 员工DTO
* @return 员工实体
*/
public Employee toEntity(EmployeeDto dto) {
if (dto == null) {
return null;
}
Employee employee = new Employee();
BeanUtils.copyProperties(dto, employee);
return employee;
}
}