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.Const;
|
using WIDESEA_Core.DB;
|
using WIDESEA_Core.Helper;
|
using WIDESEA_Core.Seed;
|
|
namespace WIDESEA_Core.HttpContextUser
|
{
|
public class AspNetUser : IUser
|
{
|
private readonly IHttpContextAccessor _accessor;
|
//private readonly ILogger<AspNetUser> _logger;
|
|
public AspNetUser(IHttpContextAccessor accessor/*, ILogger<AspNetUser> logger*/)
|
{
|
_accessor = accessor;
|
/*_logger = logger;*/
|
}
|
|
public string UserName => UserInfo.UserName;
|
|
//private string GetName()
|
//{
|
// if (IsAuthenticated() && _accessor.HttpContext.User.Identity.Name.IsNotEmptyOrNull())
|
// {
|
// return _accessor.HttpContext.User.Identity.Name;
|
// }
|
// else
|
// {
|
// if (!string.IsNullOrEmpty(GetToken()))
|
// {
|
// var getNameType = /*Permissions.IsUseIds4 ? */"name" /*: "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"*/;
|
// return GetUserInfoFromToken(getNameType).FirstOrDefault().ObjToString();
|
// }
|
// }
|
|
// return "";
|
//}
|
|
public int UserId => GetClaimValueByType("jti").FirstOrDefault().ObjToInt();
|
public long TenantId => UserInfo.TenantId;
|
|
public int RoleId => UserInfo.RoleId;
|
|
public string Token => "throw new NotImplementedException()";
|
|
public int SystemType => UserInfo.SystemType;
|
|
public bool IsAuthenticated()
|
{
|
return _accessor.HttpContext.User.Identity.IsAuthenticated;
|
}
|
|
|
public string GetToken()
|
{
|
return _accessor.HttpContext?.Request?.Headers["Authorization"].ObjToString().Replace("Bearer ", "");
|
}
|
|
private UserInfo _userInfo { get; set; }
|
private UserInfo UserInfo
|
{
|
get
|
{
|
if (_userInfo != null)
|
return _userInfo;
|
|
SqlSugarClient sqlSugarClient = new SqlSugarClient(new ConnectionConfig
|
{
|
ConfigId = MainDb.CurrentDbConnId,
|
DbType = MainDb.DbType,
|
//ConnectionString = AppSettings.app(MainDb.ConnectionString).DecryptDES(AppSecret.DB),
|
ConnectionString = AppSettings.app(MainDb.ConnectionString),
|
IsAutoCloseConnection = true
|
});
|
|
dynamic userInfo = sqlSugarClient.Queryable(MainDb.UserTableName, "x").Where(MainDb.UserId, "=", UserId).Select(GetUserInfoSelectModels()).First();
|
if (userInfo != null)
|
{
|
_userInfo = new UserInfo()
|
{
|
RoleId = userInfo.Role_Id,
|
TenantId = userInfo.TenantId,
|
SystemType = userInfo.SystemType,
|
UserName = userInfo.UserName,
|
};
|
return _userInfo;
|
}
|
|
return new UserInfo();
|
}
|
}
|
|
public bool IsSuperAdmin => IsRoleIdSuperAdmin(RoleId);
|
|
public List<Permissions> Permissions => throw new NotImplementedException();
|
|
public UserInfo GetCurrentUserInfo()
|
{
|
return UserInfo;
|
}
|
|
public List<SelectModel> GetUserInfoSelectModels()
|
{
|
List<SelectModel> selectModels = new List<SelectModel>()
|
{
|
new() {
|
FieldName = MainDb.TenantId
|
},
|
new() {
|
FieldName = MainDb.RoleId,
|
},
|
new() {
|
FieldName = MainDb.SystemType
|
},
|
new() {
|
FieldName = MainDb.UserName
|
}
|
};
|
return selectModels;
|
}
|
|
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 MessageModel<string> MessageModel { get; set; }
|
|
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 int SystemType { get; set; }
|
|
public string UserName { get; set; }
|
|
public int UserId { get; set; }
|
|
public string UserTrueName { get; set; }
|
|
public string HeadImageUrl { get; set; }
|
}
|
}
|