package com.tourguide.api.admin; import com.tourguide.common.api.ApiResponse; import com.tourguide.common.api.PageResponse; import com.tourguide.modules.system.dto.PermissionModuleResponse; import com.tourguide.modules.system.dto.RoleDetailResponse; import com.tourguide.modules.system.dto.RoleResponse; import com.tourguide.modules.system.dto.RoleSaveRequest; import com.tourguide.modules.system.service.SystemRoleService; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; import java.util.List; /** * 管理后台角色与菜单权限管理接口。 * 维护角色资料及菜单授权关系,并保护内置超级管理员角色不被误删除。 */ @RestController @RequestMapping("/api/admin/roles") public class AdminSystemRoleController { private final SystemRoleService roleService; public AdminSystemRoleController(SystemRoleService roleService) { this.roleService = roleService; } /** * 分页查询后台角色,支持按角色名称或编码关键字筛选。 * * @param page 页码,从 1 开始 * @param size 每页记录数 * @param keyword 角色名称或角色编码关键字 * @return 角色分页结果及关联账号数量 */ @GetMapping public ApiResponse> page(@RequestParam(defaultValue = "1") long page, @RequestParam(defaultValue = "10") long size, @RequestParam(required = false) String keyword) { return ApiResponse.success(roleService.page(page, size, keyword)); } /** * 查询可分配给角色的菜单权限树,供新增和编辑角色页面选择。 * * @return 按模块组织的菜单权限列表 */ @GetMapping("/permissions") public ApiResponse> permissions() { return ApiResponse.success(roleService.permissions()); } /** * 查询指定角色资料及已授权菜单标识。 * * @param id 角色主键 * @return 角色完整详情 */ @GetMapping("/{id}") public ApiResponse detail(@PathVariable Long id) { return ApiResponse.success(roleService.detail(id)); } /** * 新增自定义角色并建立菜单授权关系,角色编码由系统自动生成。 * * @param request 角色名称、备注和菜单主键集合 * @return 新建后的角色详情 */ @PostMapping public ApiResponse create(@Valid @RequestBody RoleSaveRequest request) { return ApiResponse.success(roleService.create(request)); } /** * 更新指定角色资料并整体替换菜单授权关系。 * * @param id 角色主键 * @param request 最新角色名称、备注和菜单主键集合 * @return 更新后的角色详情 */ @PutMapping("/{id}") public ApiResponse update(@PathVariable Long id, @Valid @RequestBody RoleSaveRequest request) { return ApiResponse.success(roleService.update(id, request)); } /** * 删除未被后台账号使用的自定义角色及其菜单关系。 * 内置 ADMIN 角色或仍有关联账号的角色不能删除。 * * @param id 角色主键 * @return 无业务数据的成功响应 */ @DeleteMapping("/{id}") public ApiResponse delete(@PathVariable Long id) { roleService.delete(id); return ApiResponse.success(); } }