Files
MaliangAINovalWriter/AINovalServer/src/main/java/com/ainovel/server/controller/AdminRoleController.java
2025-09-10 00:07:52 +08:00

133 lines
4.4 KiB
Java

package com.ainovel.server.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import com.ainovel.server.common.response.ApiResponse;
import com.ainovel.server.domain.model.Role;
import com.ainovel.server.service.RoleService;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
/**
* 管理员角色管理控制器
*/
@RestController
@RequestMapping("/api/v1/admin/roles")
@PreAuthorize("hasAuthority('ADMIN_MANAGE_ROLES') or hasRole('SUPER_ADMIN')")
public class AdminRoleController {
private final RoleService roleService;
@Autowired
public AdminRoleController(RoleService roleService) {
this.roleService = roleService;
}
/**
* 获取所有角色列表
*/
@GetMapping
public Mono<ResponseEntity<ApiResponse<List<Role>>>> getAllRoles() {
return roleService.findAll()
.collectList()
.map(roles -> ResponseEntity.ok(ApiResponse.success(roles)))
.onErrorResume(e -> Mono.just(
ResponseEntity.badRequest().body(ApiResponse.error(e.getMessage()))
));
}
/**
* 根据ID获取角色
*/
@GetMapping("/{id}")
public Mono<ResponseEntity<ApiResponse<Role>>> getRoleById(@PathVariable String id) {
return roleService.findById(id)
.map(role -> ResponseEntity.ok(ApiResponse.success(role)))
.defaultIfEmpty(ResponseEntity.notFound().build());
}
/**
* 创建新角色
*/
@PostMapping
public Mono<ResponseEntity<ApiResponse<Role>>> createRole(@RequestBody Role role) {
return roleService.createRole(role)
.map(savedRole -> ResponseEntity.ok(ApiResponse.success(savedRole)))
.onErrorResume(e -> Mono.just(
ResponseEntity.badRequest().body(ApiResponse.error(e.getMessage()))
));
}
/**
* 更新角色
*/
@PutMapping("/{id}")
public Mono<ResponseEntity<ApiResponse<Role>>> updateRole(@PathVariable String id, @RequestBody Role role) {
return roleService.updateRole(id, role)
.map(updatedRole -> ResponseEntity.ok(ApiResponse.success(updatedRole)))
.onErrorResume(e -> Mono.just(
ResponseEntity.badRequest().body(ApiResponse.error(e.getMessage()))
));
}
/**
* 删除角色
*/
@DeleteMapping("/{id}")
public Mono<ResponseEntity<ApiResponse<Void>>> deleteRole(@PathVariable String id) {
return roleService.deleteRole(id)
.then(Mono.just(ResponseEntity.ok(ApiResponse.<Void>success())))
.onErrorResume(e -> Mono.just(
ResponseEntity.badRequest().body(ApiResponse.<Void>error(e.getMessage()))
));
}
/**
* 为角色添加权限
*/
@PostMapping("/{id}/permissions")
public Mono<ResponseEntity<ApiResponse<Role>>> addPermissionToRole(
@PathVariable String id,
@RequestBody PermissionRequest request) {
return roleService.addPermissionToRole(id, request.getPermission())
.map(updatedRole -> ResponseEntity.ok(ApiResponse.success(updatedRole)))
.onErrorResume(e -> Mono.just(
ResponseEntity.badRequest().body(ApiResponse.error(e.getMessage()))
));
}
/**
* 从角色移除权限
*/
@DeleteMapping("/{id}/permissions/{permission}")
public Mono<ResponseEntity<ApiResponse<Role>>> removePermissionFromRole(
@PathVariable String id,
@PathVariable String permission) {
return roleService.removePermissionFromRole(id, permission)
.map(updatedRole -> ResponseEntity.ok(ApiResponse.success(updatedRole)))
.onErrorResume(e -> Mono.just(
ResponseEntity.badRequest().body(ApiResponse.error(e.getMessage()))
));
}
/**
* 权限请求DTO
*/
public static class PermissionRequest {
private String permission;
public String getPermission() {
return permission;
}
public void setPermission(String permission) {
this.permission = permission;
}
}
}