AuthController.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. 
  2. using Microsoft.Extensions.Caching.Distributed;
  3. using OASystem.Infrastructure.Repositories.Login;
  4. using System.IdentityModel.Tokens.Jwt;
  5. using System.Security.Claims;
  6. using StackExchange.Redis;
  7. using OASystem.Domain.Dtos.UserDto;
  8. using OASystem.Domain.Entities.System;
  9. using OASystem.Domain;
  10. using OASystem.Infrastructure.Repositories.System;
  11. using OASystem.Domain.Dtos.System;
  12. using OASystem.Domain.ViewModels.System;
  13. namespace OASystem.API.Controllers
  14. {
  15. /// <summary>
  16. /// 鉴权相关
  17. /// </summary>
  18. [Route("api/")]
  19. public class AuthController : ControllerBase
  20. {
  21. private readonly IMapper _mapper;
  22. private readonly IConfiguration _config;
  23. private readonly LoginRepository _loginRep;
  24. private readonly SetDataRepository _setDataRepository;
  25. private readonly CompanyRepository _CompanyRepository;
  26. private readonly SystemMenuPermissionRepository _SystemMenuPermissionRepository;
  27. //private IDatabase _redis;
  28. //private RedisHelper _redisHelper;
  29. public AuthController(IConfiguration config, LoginRepository loginRep, IMapper mapper,
  30. SetDataRepository setDataRepository, CompanyRepository companyRepository,
  31. SystemMenuPermissionRepository systemMenuPermissionRepository)
  32. {
  33. _config = config;
  34. _loginRep = loginRep;
  35. _mapper = mapper;
  36. _setDataRepository = setDataRepository;
  37. _CompanyRepository = companyRepository;
  38. _SystemMenuPermissionRepository = systemMenuPermissionRepository;
  39. //_redis = client.GetDatabase(RedisEnum.Common);
  40. //_redisHelper = client("132.232.92.186", "7369", "123456");
  41. }
  42. /// <summary>
  43. /// 用户登录
  44. /// </summary>
  45. /// <param name="dto"></param>
  46. /// <returns></returns>
  47. [AllowAnonymous]
  48. [Route("login")]
  49. [HttpPost]
  50. [ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
  51. public async Task<IActionResult> LoginAsync(LoginDto dto)
  52. {
  53. #region 校验用户信息,假设此处我们已经校验成功
  54. var userData = _loginRep.Login(_loginRep, dto);
  55. if (userData.Result.Code != 0)
  56. {
  57. if (userData.Result.Code != 0) { return Ok(JsonView(false, userData.Result.Msg)); }
  58. return Ok(JsonView(false, "暂无该员工信息!"));
  59. }
  60. //人事审核是否通过
  61. if (userData.Result.Data.HrAudit != 1)
  62. {
  63. return Ok(JsonView(false, "该员工账号暂无登录权限,人事审核未通过!"));
  64. }
  65. //该用户是否已删除
  66. if (userData.Result.Data.HrAudit != 1)
  67. {
  68. return Ok(JsonView(false, "已离职员工没有登录权限"));
  69. }
  70. #endregion
  71. var view = new LoginView
  72. {
  73. Expires = DateTime.Now.AddMinutes(30)
  74. };
  75. string authorId = dto.Number + "Token";
  76. var claims = new[] { new Claim(ClaimTypes.NameIdentifier, "Future") };
  77. var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["JwtSecurityKey"]));
  78. var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
  79. var token = new JwtSecurityToken(
  80. issuer: "OASystem.com",
  81. audience: "OASystem.com",
  82. claims: claims,
  83. expires: view.Expires,
  84. signingCredentials: creds);
  85. view.Token = new JwtSecurityTokenHandler().WriteToken(token);
  86. return Ok(JsonView(view));
  87. }
  88. /// <summary>
  89. /// 申请注册
  90. /// </summary>
  91. /// <param name="dto"></param>
  92. /// <returns></returns>
  93. [Authorize]
  94. [HttpPost]
  95. [Route("register")]
  96. public async Task<IActionResult> Register(RegisterDto dto)
  97. {
  98. var userData = _loginRep.Register(_loginRep, dto);
  99. if (userData.Result.Code != 0)
  100. {
  101. if (userData.Result.Code != 0) { return Ok(JsonView(false, userData.Result.Msg)); }
  102. return Ok(JsonView(false, "注册失败!"));
  103. }
  104. return Ok(new { Code = 0, Msg = userData.Result.Msg });
  105. }
  106. /// <summary>
  107. /// 修改密码
  108. /// </summary>
  109. /// <param name="dto"></param>
  110. /// <returns></returns>
  111. [Authorize]
  112. [HttpPost]
  113. [Route("UpdPassword")]
  114. public async Task<IActionResult> UpdateUserPassword(UpdateDto dto)
  115. {
  116. Result result = new Result();
  117. Sys_Users sys_Users = _mapper.Map<Sys_Users>(dto);
  118. var _UpdateState = await _loginRep.UpdateAsync(s => s.Id == dto.UserId, ss => sys_Users);
  119. if (_UpdateState)
  120. {
  121. result.Code = 0;
  122. result.Msg = "申请成功!人事主管审核后且信息部经理分配了登录账号,可登录OA!";
  123. }
  124. else
  125. {
  126. result.Code = -2;
  127. result.Msg = "用户修改失败!";
  128. }
  129. return Ok(JsonView(result));
  130. }
  131. /// <summary>
  132. /// 测试auth
  133. /// </summary>
  134. /// <param name="dto"></param>
  135. /// <returns></returns>
  136. [Authorize]
  137. [HttpPost("TestToken")]
  138. [ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
  139. public async Task<IActionResult> TestToken(LoginDto dto)
  140. {
  141. string authorId = dto.Number + "Token";
  142. // 从Redis里面取数据
  143. //string userToken = _redis.StringGet(authorId);
  144. string userToken = "";
  145. var view = new LoginView
  146. {
  147. Token = authorId + ":" + userToken
  148. };
  149. return Ok(JsonView(view));
  150. }
  151. /// <summary>
  152. /// 权限数据页面初始化
  153. /// </summary>
  154. /// <param name="dto"></param>
  155. /// <returns></returns>
  156. [Authorize]
  157. [HttpPost("GetAuth")]
  158. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  159. public async Task<IActionResult> GetAuth(AuthDto dto)
  160. {
  161. Result result = new Result();
  162. //模块数据
  163. var setDataResult = await _setDataRepository.GetSySDefultModule(_setDataRepository);
  164. if (setDataResult.Code != 0)
  165. {
  166. return Ok(JsonView(setDataResult.Msg)) ;
  167. }
  168. List<SetDataView> setDataList = _mapper.Map<List<SetDataView>>(setDataResult.Data);
  169. var mod = setDataList.Find(x => x.Name == "权限模块");
  170. if (mod == null)
  171. {
  172. return Ok(JsonView("未找到权限模块!"));
  173. }
  174. //页面数据
  175. var SystemMenuPermissionData = _SystemMenuPermissionRepository.GetSystemMenuViweData(_SystemMenuPermissionRepository, mod.Id, dto.pageSize,dto.currentPage);
  176. if (SystemMenuPermissionData.Code != 0)
  177. {
  178. return Ok(JsonView(SystemMenuPermissionData.Msg));
  179. }
  180. //公司数据
  181. var CompanyDataResult = _CompanyRepository.GetCompanyData(_CompanyRepository);
  182. if (CompanyDataResult.Code != 0)
  183. {
  184. return Ok(JsonView(CompanyDataResult.Msg));
  185. }
  186. result.Code = 0;
  187. result.Msg = "成功!";
  188. var Dyresult = new
  189. {
  190. setDataResult = setDataResult.Data,
  191. CompanyDataResult = CompanyDataResult.Data,
  192. SystemMenuPermissionData = SystemMenuPermissionData.Data
  193. };
  194. return Ok(JsonView(200 ,"成功!", Dyresult));
  195. }
  196. /// <summary>
  197. /// 查询部门
  198. /// </summary>
  199. /// <param name="companyid"></param>
  200. /// <returns></returns>
  201. [Authorize]
  202. [HttpPost("QueryDepartmentListByCompId")]
  203. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  204. public IActionResult QueryDepartmentListByCompId(int companyid)
  205. {
  206. return Ok(JsonView(""));
  207. }
  208. }
  209. }