using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Authorization; using LingAdmin.AuthorizationService.Services; using LingAdmin.Shared.DTOs; namespace LingAdmin.AuthorizationService.Controllers; /// /// 角色管理控制器 /// [ApiController] [Route("api/[controller]")] [Authorize(Roles = "Admin,SuperAdmin")] public class RolesController : ControllerBase { private readonly IRoleService _roleService; private readonly ILogger _logger; public RolesController(IRoleService roleService, ILogger logger) { _roleService = roleService; _logger = logger; } /// /// 获取所有角色 /// [HttpGet] public async Task>>> GetRoles() { var roles = await _roleService.GetAllRolesAsync(); return Ok(ApiResponse>.Ok(roles)); } /// /// 获取单个角色 /// [HttpGet("{id}")] public async Task>> GetRole(int id) { var role = await _roleService.GetRoleByIdAsync(id); if (role == null) { return NotFound(ApiResponse.NotFound("Role not found")); } return Ok(ApiResponse.Ok(role)); } /// /// 创建角色 /// [HttpPost] public async Task>> CreateRole([FromBody] CreateRoleRequest request) { try { // Check if code already exists var existing = await _roleService.GetRoleByCodeAsync(request.Code); if (existing != null) { return BadRequest(ApiResponse.Error("Role with this code already exists")); } var role = await _roleService.CreateRoleAsync(request); return CreatedAtAction(nameof(GetRole), new { id = role.Id }, ApiResponse.Created(role, "Role created successfully")); } catch (Exception ex) { _logger.LogError(ex, "Error creating role"); return StatusCode(500, ApiResponse.Error("Failed to create role", 500)); } } /// /// 更新角色 /// [HttpPut("{id}")] public async Task>> UpdateRole(int id, [FromBody] UpdateRoleRequest request) { try { var role = await _roleService.UpdateRoleAsync(id, request); if (role == null) { return NotFound(ApiResponse.NotFound("Role not found")); } return Ok(ApiResponse.Ok(role, "Role updated successfully")); } catch (InvalidOperationException ex) { return BadRequest(ApiResponse.Error(ex.Message)); } catch (Exception ex) { _logger.LogError(ex, "Error updating role"); return StatusCode(500, ApiResponse.Error("Failed to update role", 500)); } } /// /// 删除角色 /// [HttpDelete("{id}")] [Authorize(Roles = "SuperAdmin")] public async Task>> DeleteRole(int id) { try { var result = await _roleService.DeleteRoleAsync(id); if (!result) { return NotFound(ApiResponse.NotFound("Role not found")); } return Ok(ApiResponse.Ok(new { }, "Role deleted successfully")); } catch (InvalidOperationException ex) { return BadRequest(ApiResponse.Error(ex.Message)); } catch (Exception ex) { _logger.LogError(ex, "Error deleting role"); return StatusCode(500, ApiResponse.Error("Failed to delete role", 500)); } } /// /// 分配角色给用户 /// [HttpPost("assign")] public async Task>> AssignRoles([FromBody] AssignRolesRequest request) { try { var result = await _roleService.AssignRolesToUserAsync(request.UserId, request.RoleIds); return Ok(ApiResponse.Ok(new { }, "Roles assigned successfully")); } catch (Exception ex) { _logger.LogError(ex, "Error assigning roles"); return StatusCode(500, ApiResponse.Error("Failed to assign roles", 500)); } } /// /// 获取用户的角色 /// [HttpGet("user/{userId}")] public async Task>>> GetUserRoles(int userId) { var roles = await _roleService.GetUserRolesAsync(userId); return Ok(ApiResponse>.Ok(roles)); } /// /// 移除用户的角色 /// [HttpPost("revoke")] public async Task>> RevokeRoles([FromBody] AssignRolesRequest request) { try { var result = await _roleService.RemoveRolesFromUserAsync(request.UserId, request.RoleIds); return Ok(ApiResponse.Ok(new { }, "Roles revoked successfully")); } catch (Exception ex) { _logger.LogError(ex, "Error revoking roles"); return StatusCode(500, ApiResponse.Error("Failed to revoke roles", 500)); } } }