恢复admin相关代码 #64

Merged
hnu202326010106 merged 1 commits from wanglei_branch into develop 1 month ago

@ -22,33 +22,44 @@ public class AdminController {
private final AdminService adminService;
/**
*
* /
*/
@GetMapping("/list")
@PreAuthorize("hasRole('ADMIN')")
@Operation(summary = "获取管理员列表", description = "支持按姓名模糊搜索仅返回Admin角色管理员")
@PreAuthorize("hasAnyRole('super_admin', 'area_admin')") // 超级/区域管理员可查看
@Operation(summary = "获取管理员列表", description = "支持按姓名模糊搜索、按角色筛选")
public ResponseEntity<ResultVO<List<Admin>>> getAdminList(
@RequestParam(required = false) String name
@RequestParam(required = false) String name,
@RequestParam(required = false) Admin.AdminRole role // 角色筛选参数
) {
try {
List<Admin> adminList;
if (name != null && !name.isEmpty()) {
adminList = adminService.searchAdminsByName(name);
} else {
adminList = adminService.getAdminList();
}
List<Admin> adminList = adminService.getAdminList(name, role);
return ResponseEntity.ok(ResultVO.success(adminList));
} catch (Exception e) {
return ResponseEntity.ok(ResultVO.error(500, "查询失败:" + e.getMessage()));
}
}
/**
*
*/
@GetMapping("/roles")
@PreAuthorize("hasAnyRole('super_admin', 'area_admin')")
@Operation(summary = "获取管理员角色列表", description = "返回所有可选角色super_admin/area_admin/viewer")
public ResponseEntity<ResultVO<Admin.AdminRole[]>> getAllRoles() {
try {
Admin.AdminRole[] roles = adminService.getAllRoles();
return ResponseEntity.ok(ResultVO.success(roles));
} catch (Exception e) {
return ResponseEntity.ok(ResultVO.error(500, "获取角色列表失败:" + e.getMessage()));
}
}
/**
* /
*/
@PostMapping("/save")
@PreAuthorize("hasRole('ADMIN')")
@Operation(summary = "保存管理员", description = "新增/编辑管理员角色强制为Admin")
@PreAuthorize("hasRole('super_admin')") // 仅超级管理员可新增/编辑
@Operation(summary = "保存管理员", description = "新增/编辑管理员,支持指定角色")
public ResponseEntity<ResultVO<Admin>> saveAdmin(@RequestBody Admin admin) {
try {
Admin savedAdmin = adminService.saveAdmin(admin);
@ -62,7 +73,7 @@ public class AdminController {
*
*/
@DeleteMapping("/{adminId}")
@PreAuthorize("hasRole('ADMIN')")
@PreAuthorize("hasRole('super_admin')") // 仅超级管理员可删除
@Operation(summary = "删除管理员", description = "按ID删除管理员")
public ResponseEntity<ResultVO<Void>> deleteAdmin(@PathVariable String adminId) {
try {
@ -77,7 +88,7 @@ public class AdminController {
*
*/
@PostMapping("/login")
@Operation(summary = "管理员登录", description = "用户名+密码验证")
@Operation(summary = "管理员登录", description = "用户名+密码验证,返回管理员信息(含角色)")
public ResponseEntity<ResultVO<Admin>> login(
@RequestParam String adminName,
@RequestParam String password

@ -1,14 +1,12 @@
/**
*
* admin
*
*/
package com.campus.water.entity;
import lombok.Data;
import jakarta.persistence.Column;
import jakarta.persistence.*;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import java.time.LocalDateTime;
@Data
@ -28,11 +26,10 @@ public class Admin {
@Column(name = "phone", length = 20)
private String phone;
// 恢复三个角色枚举
@Enumerated(EnumType.STRING)
@Column(name = "role", length = 50)
private AdminRole role = AdminRole.Admin;
@Column(name = "role", length = 50, nullable = false)
private AdminRole role;
@Column(name = "created_time")
private LocalDateTime createdTime = LocalDateTime.now();
@ -40,9 +37,10 @@ public class Admin {
@Column(name = "updated_time")
private LocalDateTime updatedTime = LocalDateTime.now();
// 枚举类恢复super_admin、area_admin、viewer三个角色
public enum AdminRole {
Admin
super_admin, // 超级管理员
area_admin, // 区域管理员
viewer // 查看者
}
}

@ -1,5 +1,6 @@
package com.campus.water.entity.dto.request;
import com.campus.water.entity.Admin;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
@ -17,14 +18,14 @@ public class RegisterRequest {
private String userType; // admin/user/repairer
// 用户特有字段
private String studentId; // 学生ID仅user类型需要
private String studentName; // 学生姓名仅user类型需要
private String phone; // 新增:学生/用户手机号仅user类型需要
private String studentId;
private String studentName;
private String phone;
// 管理员特有字段
private String adminId; // 管理员ID仅admin类型需要
// 已移除管理员角色区分(根据之前需求
private String adminId;
private String role; // 新增管理员角色super_admin/area_admin/viewer
// 维修人员特有字段
private String repairmanId; // 维修人员ID仅repairer类型需要
private String repairmanId;
}

@ -21,11 +21,14 @@ public interface AdminRepository extends JpaRepository<Admin, String> {
// 按手机号查询
Optional<Admin> findByPhone(String phone);
// 按角色查询管理员(核心:恢复角色筛选)
List<Admin> findByRole(Admin.AdminRole role);
// 按姓名+角色组合查询(可选,增强筛选)
List<Admin> findByAdminNameContainingAndRole(String name, Admin.AdminRole role);
// 检查唯一约束
boolean existsByAdminId(String adminId);
boolean existsByPhone(String phone);
boolean existsByAdminName(String adminName);
// 可选若需按角色过滤仅Admin角色保留此方法单角色下可省略
List<Admin> findByRole(Admin.AdminRole role);
}

@ -16,18 +16,22 @@ public class AdminService {
private final AdminRepository adminRepository;
/**
* Admin
* /
*/
public List<Admin> getAdminList() {
// 单角色下直接查全部也可调用findByRole(Admin.AdminRole.Admin)
return adminRepository.findAll();
}
/**
*
*/
public List<Admin> searchAdminsByName(String name) {
return adminRepository.findByAdminNameContaining(name);
public List<Admin> getAdminList(String name, Admin.AdminRole role) {
if (name != null && !name.isEmpty() && role != null) {
// 按姓名+角色组合查询
return adminRepository.findByAdminNameContainingAndRole(name, role);
} else if (role != null) {
// 仅按角色查询
return adminRepository.findByRole(role);
} else if (name != null && !name.isEmpty()) {
// 仅按姓名查询
return adminRepository.findByAdminNameContaining(name);
} else {
// 查询全部
return adminRepository.findAll();
}
}
/**
@ -38,11 +42,9 @@ public class AdminService {
}
/**
* /Admin
* /
*/
public Admin saveAdmin(Admin admin) {
// 强制设置为Admin角色避免手动修改
admin.setRole(Admin.AdminRole.Admin);
admin.setUpdatedTime(LocalDateTime.now());
if (admin.getCreatedTime() == null) {
admin.setCreatedTime(LocalDateTime.now());
@ -62,7 +64,14 @@ public class AdminService {
*/
public Optional<Admin> login(String adminName, String password) {
Optional<Admin> admin = adminRepository.findByAdminName(adminName);
// 此处仅示例实际需结合密码加密如BCrypt验证
// 实际生产环境需替换为BCrypt密码加密验证
return admin.filter(a -> a.getPassword().equals(password));
}
/**
* 使
*/
public Admin.AdminRole[] getAllRoles() {
return Admin.AdminRole.values();
}
}

@ -8,6 +8,7 @@ import com.campus.water.mapper.AdminRepository;
import com.campus.water.mapper.RepairerAuthRepository;
import com.campus.water.mapper.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCrypt;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
@ -50,8 +51,7 @@ public class RegisterService {
return true;
}
// 修正管理员注册逻辑适配新实体Admin
// 原RegisterService中handleAdminRegister方法修改
// RegisterService中handleAdminRegister方法修改
private void handleAdminRegister(String username, String password, RegisterRequest request) {
// 检查用户名/ID/手机号是否已存在
if (adminRepository.existsByAdminName(username)) {
@ -64,13 +64,14 @@ public class RegisterService {
throw new RuntimeException("手机号已被注册");
}
// 构建管理员对象,默认角色为Admin
// 构建管理员对象,支持指定角色需从request中接收role参数
Admin admin = new Admin();
admin.setAdminId(request.getAdminId());
admin.setAdminName(username);
admin.setPassword(password); // 实际需加密如BCrypt
admin.setPassword(BCrypt.hashpw(password, BCrypt.gensalt())); // 密码加密
admin.setPhone(request.getPhone());
admin.setRole(Admin.AdminRole.Admin); // 强制设置为Admin角色
// 从注册请求中获取角色需在RegisterRequest添加role字段
admin.setRole(Admin.AdminRole.valueOf(request.getRole()));
admin.setCreatedTime(LocalDateTime.now());
admin.setUpdatedTime(LocalDateTime.now());

Loading…
Cancel
Save