using Microsoft.Extensions.Caching.Distributed;
using OASystem.Infrastructure.Repositories.Login;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using StackExchange.Redis;
using OASystem.Domain.Dtos.UserDto;
using OASystem.RedisRepository;
using OASystem.Infrastructure.Repositories.System;
namespace OASystem.API.Controllers
{
///
/// 鉴权相关
///
[Route("api/")]
public class AuthController : ControllerBase
{
private readonly IMapper _mapper;
private readonly IConfiguration _config;
private readonly LoginRepository _loginRep;
private readonly UsersRepository _usersRepository;
private readonly SetDataRepository _setDataRepository;
private readonly SystemMenuPermissionRepository _SystemMenuPermissionRepository;
private readonly CompanyRepository _CompanyRepository;
//private IDatabase _redis;
//private RedisHelper _redisHelper;
public AuthController(IConfiguration config, LoginRepository loginRep, IMapper mapper,
SetDataRepository setDataRepository, CompanyRepository companyRepository,
SystemMenuPermissionRepository systemMenuPermissionRepository)
{
_config = config;
_loginRep = loginRep;
_mapper = mapper;
_setDataRepository = setDataRepository;
_CompanyRepository = companyRepository;
_SystemMenuPermissionRepository = systemMenuPermissionRepository;
//_usersRepository = usersRepository;
}
///
/// 用户登录
///
///
///
[Route("login")]
[HttpPost]
[ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
public async Task LoginAsync(LoginDto dto)
{
#region 校验用户信息
var userData = _loginRep.Login(dto);
if (userData.Result.Code != 0)
{
if (userData.Result.Code != 0) { return Ok(JsonView(false, userData.Result.Msg)); }
return Ok(JsonView(false, "暂无该员工信息!"));
}
#endregion
var view = new LoginView
{
Expires = DateTime.Now.AddMinutes(30),
UserInfo = userData.Result.Data
};
string authorId = dto.Number + "Token";
var claims = new[] { new Claim(ClaimTypes.NameIdentifier, "Future") };
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["JwtSecurityKey"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: "OASystem.com",
audience: "OASystem.com",
claims: claims,
expires: view.Expires,
signingCredentials: creds);
view.Token = new JwtSecurityTokenHandler().WriteToken(token);
//Redis String使用示例
//TimeSpan ts = new TimeSpan(0, 30, 0);
//await RedisRepository.RedisFactory.CreateRedisRepository().StringSetAsync("key01", "value01", ts);//string 存
//string redisString = await RedisRepository.RedisFactory.CreateRedisRepository().StringGetAsync("key01");//string 取
return Ok(JsonView(view));
}
///
/// 申请注册
///
///
///
[Authorize]
[HttpPost]
[Route("register")]
public async Task Register(RegisterDto dto)
{
var userData = _loginRep.Register(_loginRep, dto);
if (userData.Result.Code != 0)
{
if (userData.Result.Code != 0) { return Ok(JsonView(false, userData.Result.Msg)); }
return Ok(JsonView(false, "注册失败!"));
}
return Ok(new { Code = 0, Msg = userData.Result.Msg });
}
///
/// 修改密码
///
///
///
[Authorize]
[HttpPost]
[Route("UpdPassword")]
public async Task UpdateUserPassword(UpdateDto dto)
{
Result result = new Result();
Sys_Users sys_Users = _mapper.Map(dto);
var _UpdateState = await _loginRep.UpdateAsync(s => s.Id == dto.UserId, ss => sys_Users);
if (_UpdateState)
{
result.Code = 0;
result.Msg = "申请成功!人事主管审核后且信息部经理分配了登录账号,可登录OA!";
}
else
{
result.Code = -2;
result.Msg = "用户修改失败!";
}
return Ok(JsonView(result));
}
///
/// 测试auth
///
///
///
[Authorize]
[HttpPost("TestToken")]
[ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
public async Task TestToken(LoginDto dto)
{
string authorId = dto.Number + "Token";
// 从Redis里面取数据
//string userToken = _redis.StringGet(authorId);
string userToken = "";
var view = new LoginView
{
Token = authorId + ":" + userToken
};
return Ok(JsonView(view));
}
///
/// 权限数据页面初始化
///
///
///
[Authorize]
[HttpPost("GetAuth")]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task GetAuth(AuthDto dto)
{
Result result = new Result();
//模块数据
var setDataResult = await _setDataRepository.GetSySDefultModule(_setDataRepository);
if (setDataResult.Code != 0)
{
return Ok(JsonView(setDataResult.Msg)) ;
}
List setDataList = _mapper.Map>(setDataResult.Data);
var mod = setDataList.Find(x => x.Name == "权限模块");
if (mod == null)
{
return Ok(JsonView("未找到权限模块!"));
}
//页面数据
var SystemMenuPermissionData = _SystemMenuPermissionRepository.GetSystemMenuViweData(_SystemMenuPermissionRepository, mod.Id, dto.pageSize,dto.currentPage);
if (SystemMenuPermissionData.Code != 0)
{
return Ok(JsonView(SystemMenuPermissionData.Msg));
}
//公司数据
var CompanyDataResult = _CompanyRepository.GetCompanyData(_CompanyRepository);
if (CompanyDataResult.Code != 0)
{
return Ok(JsonView(CompanyDataResult.Msg));
}
result.Code = 0;
result.Msg = "成功!";
var Dyresult = new
{
setDataResult = setDataResult.Data,
CompanyDataResult = CompanyDataResult.Data,
SystemMenuPermissionData = SystemMenuPermissionData.Data
};
return Ok(JsonView(200 ,"成功!", Dyresult));
}
///
/// 查询部门
///
///
///
[Authorize]
[HttpPost("QueryDepartmentListByCompId")]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public IActionResult QueryDepartmentListByCompId(int companyid)
{
return Ok(JsonView(""));
}
}
}