using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Yi.Framework.Common.Enum; using Yi.Framework.Common.Helper; using Yi.Framework.Common.Models; using Yi.Framework.Core; using Yi.Framework.DTOModel; using Yi.Framework.Interface; using Yi.Framework.Model.Models; using Yi.Framework.Repository; using Yi.Framework.WebCore; using Yi.Framework.WebCore.AttributeExtend; using Yi.Framework.WebCore.AuthorizationPolicy; namespace Yi.Framework.ApiMicroservice.Controllers { /// /// 账户管理 /// [ApiController] [Route("api/[controller]/[action]")] public class AccountController : ControllerBase { private IUserService _iUserService; private JwtInvoker _jwtInvoker; private ILogger _logger; public AccountController(ILogger logger, IUserService iUserService, JwtInvoker jwtInvoker) { _iUserService = iUserService; _jwtInvoker = jwtInvoker; _logger = logger; } /// /// 没啥说,登录 /// /// /// [AllowAnonymous] [HttpPost] public async Task Login(LoginDto loginDto) { //跳过 //先效验验证码和UUID UserEntity user = new(); if (await _iUserService.Login(loginDto.UserName, loginDto.Password, o => user = o)) { var userRoleMenu = await _iUserService.GetUserAllInfo(user.Id); return Result.Success("登录成功!").SetData(new { token = _jwtInvoker.GetAccessToken(userRoleMenu.User, userRoleMenu.Menus) }); } return Result.Error("登录失败!用户名或者密码错误!"); } /// /// 没啥说,注册 /// /// /// [AllowAnonymous] [HttpPost] public async Task Register(RegisterDto registerDto) { UserEntity user = new(); if (await _iUserService.Register(WebCore.Mapper.MapperHelper.Map(registerDto), o => user = o)) { return Result.Success("注册成功!").SetData(user); } return Result.SuccessError("注册失败!用户名已存在!"); } /// /// 没啥说,登出 /// /// [HttpPost] public Result Logout() { return Result.Success("安全登出成功!"); } /// /// 通过已登录的用户获取用户信息 /// /// [HttpGet] //[Authorize] public async Task GetUserAllInfo() { //通过鉴权jwt获取到用户的id var userId = HttpContext.GetCurrentUserEntityInfo(out _).Id; var data = await _iUserService.GetUserAllInfo(userId); data.Menus.Clear(); return Result.Success().SetData(data); } /// /// 获取当前登录用户的前端路由 /// /// [HttpGet] public async Task GetRouterInfo() { var userId = HttpContext.GetCurrentUserEntityInfo(out _).Id; var data = await _iUserService.GetUserAllInfo(userId); //将后端菜单转换成前端路由,组件级别需要过滤 List routers = MenuEntity.RouterBuild(data.Menus.ToList()); return Result.Success().SetData(routers); } /// /// 更新登录的用户密码 /// /// /// [HttpPut] public async Task UpdatePassword(UpdatePasswordDto updatePasswordDto) { var userId = HttpContext.GetCurrentUserEntityInfo(out _).Id; var userEntiy = await _iUserService._repository.GetByIdAsync(userId); //判断输入的老密码是否和原密码相同 if (userEntiy.JudgePassword(updatePasswordDto.OldPassword)) { userEntiy.Password = updatePasswordDto.NewPassword; userEntiy.BuildPassword(); return Result.Success().SetStatus(await _iUserService._repository.UpdateAsync(userEntiy)); } return Result.SuccessError("原密码错误!"); } /// /// 更新已登录用户的用户信息 /// /// /// [HttpPut] public async Task UpdateUserByHttp(UserEntity user) { //当然,密码是不能给他修改的 user.Password = null; user.Salt = null; //修改需要赋值上主键哦 user.Id = HttpContext.GetCurrentUserEntityInfo(out _).Id; return Result.Success().SetStatus(await _iUserService._repository.UpdateIgnoreNullAsync(user)); } } }