using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using System.Threading.Tasks; using Yh.Platform.Abstractions; using Yh.Platform.Auth; using Yh.Platform.OpenApi; using YhCore.Common; namespace YhCore.WebApi.Controllers.Api { /// /// 用户基础接口(对应 Java 版 controller/api/UserController,路由 /api/base/)。 /// [ApiController] [Route(ApiRoutes.ApiPath + "/base")] public class UserController : ControllerBase { private readonly IOpenApiUserClient _openApiUserClient; public UserController(IOpenApiUserClient openApiUserClient) { _openApiUserClient = openApiUserClient; } /// /// 获取当前用户可见的应用模块(对应 Java GET /api/base/getUserMod, /// 内部调用 YschBaseOpenApi.getUserModule)。 /// [HttpGet("getUserMod")] public async Task> GetUserMod() { var boa = BoaUserContext.Get(); return await _openApiUserClient.GetUserModuleAsync(boa?.Id ?? 0, boa?.School?.Id); } /// /// 获取当前登录用户信息(对应 Java GET /api/base/getUserInfo, /// Java 版直接返回认证切面注入的 authUserWithDept)。 /// [HttpGet("getUserInfo")] public BoaUser GetUserInfo() { return BoaUserContext.Get(); } /// /// 登出(对应 Java GET /api/base/logout:session.invalidate())。 /// [HttpGet("logout")] public async Task Logout() { // 清除本地 Cookie 登录态 await HttpContext.SignOutAsync(YhAuthDefaults.CookieScheme); if (HttpContext.Features.Get() != null) { HttpContext.Session.Clear(); } return Ok(); } } }