using Microsoft.AspNetCore.Http;
|
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.Logging;
|
using SqlSugar;
|
using System;
|
using System.Collections.Generic;
|
using System.IdentityModel.Tokens.Jwt;
|
using System.Linq;
|
using System.Security.Claims;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEA_Core.Authorization;
|
using WIDESEA_Core.Caches;
|
using WIDESEA_Core.Const;
|
using WIDESEA_Core.DB;
|
using WIDESEA_Core.Helper;
|
using WIDESEA_Core.Seed;
|
using ICacheService = WIDESEA_Core.Caches.ICacheService;
|
|
namespace WIDESEA_Core.HttpContextUser
|
{
|
public class AspNetUser : IUser
|
{
|
private readonly IHttpContextAccessor _accessor;
|
private readonly ICacheService _cacheService;
|
//private readonly ILogger<AspNetUser> _logger;
|
|
public AspNetUser(IHttpContextAccessor accessor, ICacheService cacheService)
|
{
|
_accessor = accessor;
|
_cacheService = cacheService;
|
/*_logger = logger;*/
|
}
|
|
public string UserName => GetUserInfoFromToken(ClaimTypes.Name).FirstOrDefault() ?? "";
|
|
public int UserId => GetClaimValueByType(JwtRegisteredClaimNames.Jti) == null ? 0 : GetClaimValueByType(JwtRegisteredClaimNames.Jti).FirstOrDefault()?.ObjToInt() ?? 0;
|
|
public long TenantId => GetUserInfoFromToken(nameof(TenantId)).FirstOrDefault()?.ObjToLong() ?? -1;
|
|
public int RoleId => GetUserInfoFromToken(ClaimTypes.Role).FirstOrDefault()?.ObjToInt() ?? 0;
|
|
public string Token => GetToken();
|
|
public bool IsAuthenticated()
|
{
|
return _accessor.HttpContext?.User?.Identity?.IsAuthenticated ?? false;
|
}
|
|
public string GetToken()
|
{
|
string token = _cacheService.Get(UserId.ToString());
|
if (!string.IsNullOrEmpty(token)) { return token; }
|
return string.Empty;
|
//return _accessor.HttpContext?.Request?.Headers["Authorization"].ObjToString().Replace("Bearer ", "") ?? "";
|
}
|
|
public void UpdateToke(string token)
|
{
|
_cacheService.AddOrUpdate(UserId.ToString(), token);
|
}
|
|
public bool IsSuperAdmin => IsRoleIdSuperAdmin(RoleId);
|
|
public List<string> GetUserInfoFromToken(string ClaimType)
|
{
|
var jwtHandler = new JwtSecurityTokenHandler();
|
var token = "";
|
|
token = GetToken();
|
// token校验
|
if (token.IsNotEmptyOrNull() && jwtHandler.CanReadToken(token))
|
{
|
JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token);
|
|
return (from item in jwtToken.Claims
|
where item.Type == ClaimType
|
select item.Value).ToList();
|
}
|
|
return new List<string>() { };
|
}
|
|
public IEnumerable<Claim> GetClaimsIdentity()
|
{
|
if (_accessor.HttpContext != null)
|
{
|
var claims = _accessor.HttpContext.User.Claims.ToList();
|
var headers = _accessor.HttpContext.Request.Headers;
|
foreach (var header in headers)
|
{
|
claims.Add(new Claim(header.Key, header.Value));
|
}
|
|
return claims;
|
}
|
return ArraySegment<Claim>.Empty;
|
}
|
|
public List<string> GetClaimValueByType(string ClaimType)
|
{
|
return (from item in GetClaimsIdentity()
|
where item.Type == ClaimType
|
select item.Value).ToList();
|
}
|
|
public bool IsRoleIdSuperAdmin(int roleId)
|
{
|
return roleId == 1;
|
}
|
}
|
|
public class UserInfo
|
{
|
public long TenantId { get; set; }
|
|
public int RoleId { get; set; }
|
|
public string UserName { get; set; }
|
|
public int UserId { get; set; }
|
|
public string UserTrueName { get; set; }
|
|
public string HeadImageUrl { get; set; }
|
}
|
}
|