using Attribute; using Base; using Dto; using Enums; using Extensions; using Filters; using Infrastructure; using Mapster; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Model; using Model.Base; using Services; using Util; namespace Controllers { /// /// 登录 /// [ApiExplorerSettings(GroupName = "sys")] public class SysLoginController : BaseController { private readonly ISysUserService sysUserService; private readonly ISysMenuService sysMenuService; private readonly ISysLoginService sysLoginService; private readonly ISysPermissionService permissionService; private readonly ISysRoleService roleService; public SysLoginController( ISysMenuService sysMenuService, ISysUserService sysUserService, ISysLoginService sysLoginService, ISysPermissionService permissionService, ISysRoleService sysRoleService) { this.sysMenuService = sysMenuService; this.sysUserService = sysUserService; this.sysLoginService = sysLoginService; this.permissionService = permissionService; roleService = sysRoleService; } /// /// 登录 /// /// 登录对象 /// [Route("/v1/tel/sysServer/oauth2/token")] [HttpPost] [Log(Title = "登录")] public IActionResult Login([FromBody] LoginBodyDto loginBody) { if (loginBody == null) { throw new CustomException("请求参数错误"); } loginBody.loginIP = HttpContextExtension.GetClientUserIp(HttpContext); sysLoginService.CheckLockUser(loginBody.username); string location = ""; //HttpContextExtension.GetIpInfo(loginBody.LoginIP); var user = sysLoginService.Login(loginBody, new SysLogininfor() { LoginLocation = location }); List roles = roleService.SelectUserRoleListByUserId(user.userId); //权限集合 eg *:*:*,system:user:list List permissions = permissionService.GetMenuPermission(user); TokenModel loginUser = new(user.Adapt(), roles.Adapt>()); CacheService.SetUserPerms(GlobalConstant.UserPermKEY + user.userId, permissions); return SUCCESS(sysLoginService.GetLoginInfo(loginUser)); } /// /// 注销 /// /// [Log(Title = "注销")] [HttpPost("logout")] public IActionResult LogOut() { //Task.Run(async () => //{ // //注销登录的用户,相当于ASP.NET中的FormsAuthentication.SignOut // await HttpContext.SignOutAsync(); //}).Wait(); var userid = HttpContext.GetUId(); var name = HttpContext.GetName(); CacheService.RemoveUserPerms(GlobalConstant.UserPermKEY + userid); return SUCCESS(new { name, id = userid }); } /// /// 获取用户信息 /// /// [Verify] [HttpGet("getInfo")] public IActionResult GetUserInfo() { long userid = HttpContext.GetUId(); var user = sysUserService.SelectUserById(userid); //前端校验按钮权限使用 //角色集合 eg: admin,yunying,common List roles = permissionService.GetRolePermission(user); //权限集合 eg *:*:*,system:user:list List permissions = permissionService.GetMenuPermission(user); return SUCCESS(new { user, roles, permissions }); } /// /// 获取路由信息 /// /// [Verify] [HttpGet("getRouters")] public IActionResult GetRouters() { long uid = HttpContext.GetUId(); var menus = sysMenuService.SelectMenuTreeByUserId(uid); return SUCCESS(sysMenuService.BuildMenus(menus)); } /// /// 注册 /// /// /// [HttpPost("/register")] [AllowAnonymous] [Log(Title = "注册", BusinessType = BusinessType.INSERT)] public IActionResult Register([FromBody] RegisterDto dto) { dto.UserIP = HttpContext.GetClientUserIp(); SysUser user = sysUserService.Register(dto); if (user.userId > 0) { return SUCCESS(user); } return ToResponse(ResultCode.CUSTOM_ERROR, "注册失败,请联系管理员"); } /// /// 生成二维码 /// /// /// /// [HttpGet("/GenerateQrcode")] public IActionResult GenerateQrcode(string uuid, string deviceId) { var state = Guid.NewGuid().ToString(); var dict = new Dictionary { { "state", state } }; CacheService.SetScanLogin(uuid, dict); return SUCCESS(new { status = 1, state, uuid, codeContent = new { uuid, deviceId }// "https://qm.qq.com/cgi-bin/qm/qr?k=kgt4HsckdljU0VM-0kxND6d_igmfuPlL&authKey=r55YUbruiKQ5iwC/folG7KLCmZ++Y4rQVgNlvLbUniUMkbk24Y9+zNuOmOnjAjRc&noverify=0" }); } } }