SysLoginController.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. using Attribute;
  2. using Base;
  3. using Dto;
  4. using Enums;
  5. using Extensions;
  6. using Filters;
  7. using Infrastructure;
  8. using Mapster;
  9. using Microsoft.AspNetCore.Authorization;
  10. using Microsoft.AspNetCore.Mvc;
  11. using Model;
  12. using Model.Base;
  13. using Services;
  14. using Util;
  15. namespace Controllers
  16. {
  17. /// <summary>
  18. /// 登录
  19. /// </summary>
  20. [ApiExplorerSettings(GroupName = "sys")]
  21. public class SysLoginController : BaseController
  22. {
  23. private readonly ISysUserService sysUserService;
  24. private readonly ISysMenuService sysMenuService;
  25. private readonly ISysLoginService sysLoginService;
  26. private readonly ISysPermissionService permissionService;
  27. private readonly ISysRoleService roleService;
  28. public SysLoginController(
  29. ISysMenuService sysMenuService,
  30. ISysUserService sysUserService,
  31. ISysLoginService sysLoginService,
  32. ISysPermissionService permissionService,
  33. ISysRoleService sysRoleService)
  34. {
  35. this.sysMenuService = sysMenuService;
  36. this.sysUserService = sysUserService;
  37. this.sysLoginService = sysLoginService;
  38. this.permissionService = permissionService;
  39. roleService = sysRoleService;
  40. }
  41. /// <summary>
  42. /// 登录
  43. /// </summary>
  44. /// <param name="loginBody">登录对象</param>
  45. /// <returns></returns>
  46. [Route("/v1/tel/sysServer/oauth2/token")]
  47. [HttpPost]
  48. [Log(Title = "登录")]
  49. public IActionResult Login([FromBody] LoginBodyDto loginBody)
  50. {
  51. if (loginBody == null) { throw new CustomException("请求参数错误"); }
  52. loginBody.loginIP = HttpContextExtension.GetClientUserIp(HttpContext);
  53. sysLoginService.CheckLockUser(loginBody.username);
  54. string location = ""; //HttpContextExtension.GetIpInfo(loginBody.LoginIP);
  55. var user = sysLoginService.Login(loginBody, new SysLogininfor() { LoginLocation = location });
  56. List<SysRole> roles = roleService.SelectUserRoleListByUserId(user.userId);
  57. //权限集合 eg *:*:*,system:user:list
  58. List<string> permissions = permissionService.GetMenuPermission(user);
  59. TokenModel loginUser = new(user.Adapt<TokenModel>(), roles.Adapt<List<Roles>>());
  60. CacheService.SetUserPerms(GlobalConstant.UserPermKEY + user.userId, permissions);
  61. return SUCCESS(sysLoginService.GetLoginInfo(loginUser));
  62. }
  63. /// <summary>
  64. /// 注销
  65. /// </summary>
  66. /// <returns></returns>
  67. [Log(Title = "注销")]
  68. [HttpPost("logout")]
  69. public IActionResult LogOut()
  70. {
  71. //Task.Run(async () =>
  72. //{
  73. // //注销登录的用户,相当于ASP.NET中的FormsAuthentication.SignOut
  74. // await HttpContext.SignOutAsync();
  75. //}).Wait();
  76. var userid = HttpContext.GetUId();
  77. var name = HttpContext.GetName();
  78. CacheService.RemoveUserPerms(GlobalConstant.UserPermKEY + userid);
  79. return SUCCESS(new { name, id = userid });
  80. }
  81. /// <summary>
  82. /// 获取用户信息
  83. /// </summary>
  84. /// <returns></returns>
  85. [Verify]
  86. [HttpGet("getInfo")]
  87. public IActionResult GetUserInfo()
  88. {
  89. long userid = HttpContext.GetUId();
  90. var user = sysUserService.SelectUserById(userid);
  91. //前端校验按钮权限使用
  92. //角色集合 eg: admin,yunying,common
  93. List<string> roles = permissionService.GetRolePermission(user);
  94. //权限集合 eg *:*:*,system:user:list
  95. List<string> permissions = permissionService.GetMenuPermission(user);
  96. return SUCCESS(new { user, roles, permissions });
  97. }
  98. /// <summary>
  99. /// 获取路由信息
  100. /// </summary>
  101. /// <returns></returns>
  102. [Verify]
  103. [HttpGet("getRouters")]
  104. public IActionResult GetRouters()
  105. {
  106. long uid = HttpContext.GetUId();
  107. var menus = sysMenuService.SelectMenuTreeByUserId(uid);
  108. return SUCCESS(sysMenuService.BuildMenus(menus));
  109. }
  110. /// <summary>
  111. /// 注册
  112. /// </summary>
  113. /// <param name="dto"></param>
  114. /// <returns></returns>
  115. [HttpPost("/register")]
  116. [AllowAnonymous]
  117. [Log(Title = "注册", BusinessType = BusinessType.INSERT)]
  118. public IActionResult Register([FromBody] RegisterDto dto)
  119. {
  120. dto.UserIP = HttpContext.GetClientUserIp();
  121. SysUser user = sysUserService.Register(dto);
  122. if (user.userId > 0)
  123. {
  124. return SUCCESS(user);
  125. }
  126. return ToResponse(ResultCode.CUSTOM_ERROR, "注册失败,请联系管理员");
  127. }
  128. /// <summary>
  129. /// 生成二维码
  130. /// </summary>
  131. /// <param name="uuid"></param>
  132. /// <param name="deviceId"></param>
  133. /// <returns></returns>
  134. [HttpGet("/GenerateQrcode")]
  135. public IActionResult GenerateQrcode(string uuid, string deviceId)
  136. {
  137. var state = Guid.NewGuid().ToString();
  138. var dict = new Dictionary<string, object>
  139. {
  140. { "state", state }
  141. };
  142. CacheService.SetScanLogin(uuid, dict);
  143. return SUCCESS(new
  144. {
  145. status = 1,
  146. state,
  147. uuid,
  148. codeContent = new { uuid, deviceId }// "https://qm.qq.com/cgi-bin/qm/qr?k=kgt4HsckdljU0VM-0kxND6d_igmfuPlL&authKey=r55YUbruiKQ5iwC/folG7KLCmZ++Y4rQVgNlvLbUniUMkbk24Y9+zNuOmOnjAjRc&noverify=0"
  149. });
  150. }
  151. }
  152. }