AuthController.cs 7.9 KB

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