411 lines
10 KiB
C#
411 lines
10 KiB
C#
using Microsoft.AspNetCore.Http;
|
|
|
|
namespace IRaCIS.Core.Domain.Share
|
|
{
|
|
/// <summary>
|
|
/// 用户信息
|
|
/// </summary>
|
|
public class UserInfo : IUserInfo
|
|
{
|
|
private readonly IHttpContextAccessor _accessor;
|
|
|
|
public UserInfo(IHttpContextAccessor accessor)
|
|
{
|
|
_accessor = accessor;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 用户角色Id
|
|
/// </summary>
|
|
public Guid UserRoleId
|
|
{
|
|
get
|
|
{
|
|
var id = _accessor?.HttpContext?.User?.FindFirst(JwtIRaCISClaimType.UserRoleId);
|
|
if (id != null && !string.IsNullOrEmpty(id.Value))
|
|
{
|
|
return Guid.Parse(id.Value);
|
|
}
|
|
return Guid.Empty;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 真实用户Id
|
|
/// </summary>
|
|
public Guid IdentityUserId
|
|
{
|
|
get
|
|
{
|
|
var id = _accessor?.HttpContext?.User?.FindFirst(JwtIRaCISClaimType.IdentityUserId);
|
|
if (id != null && !string.IsNullOrEmpty(id.Value))
|
|
{
|
|
return Guid.Parse(id.Value);
|
|
}
|
|
return Guid.Empty;
|
|
}
|
|
}
|
|
|
|
public Guid UserTypeId
|
|
{
|
|
get
|
|
{
|
|
var userTypeId = _accessor?.HttpContext?.User?.FindFirst(JwtIRaCISClaimType.UserTypeId);
|
|
if (userTypeId != null && !string.IsNullOrEmpty(userTypeId.Value))
|
|
{
|
|
return Guid.Parse(userTypeId.Value);
|
|
}
|
|
return Guid.Empty;
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 用户名
|
|
/// </summary>
|
|
public string UserName
|
|
{
|
|
get
|
|
{
|
|
var name = _accessor?.HttpContext?.User?.FindFirst(JwtIRaCISClaimType.UserName);
|
|
|
|
if (name != null && !string.IsNullOrEmpty(name.Value))
|
|
{
|
|
return name.Value;
|
|
}
|
|
|
|
return "";
|
|
}
|
|
}
|
|
|
|
|
|
public string FullName
|
|
{
|
|
get
|
|
{
|
|
var name = _accessor?.HttpContext?.User?.FindFirst(JwtIRaCISClaimType.FullName);
|
|
|
|
if (name != null && !string.IsNullOrEmpty(name.Value))
|
|
{
|
|
return name.Value;
|
|
}
|
|
|
|
return "";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
public string UserTypeShortName
|
|
{
|
|
get
|
|
{
|
|
var userType = _accessor?.HttpContext?.User?.FindFirst(JwtIRaCISClaimType.UserTypeShortName);
|
|
|
|
if (userType != null && !string.IsNullOrEmpty(userType.Value))
|
|
{
|
|
return userType.Value;
|
|
}
|
|
return string.Empty;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public string UserTypeEnumStr
|
|
{
|
|
get
|
|
{
|
|
var userType = _accessor?.HttpContext?.User?.FindFirst(JwtIRaCISClaimType.UserTypeEnum);
|
|
|
|
if (userType != null && !string.IsNullOrEmpty(userType.Value))
|
|
{
|
|
return userType.Value;
|
|
}
|
|
return UserTypeEnum.ShareImage.ToString();
|
|
}
|
|
}
|
|
|
|
public int UserTypeEnumInt
|
|
{
|
|
get
|
|
{
|
|
var userType = _accessor?.HttpContext?.User?.FindFirst(JwtIRaCISClaimType.UserTypeEnumInt);
|
|
|
|
if (userType != null && !string.IsNullOrEmpty(userType.Value))
|
|
{
|
|
return int.Parse(userType.Value);
|
|
}
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
public bool IsAdmin
|
|
{
|
|
get
|
|
{
|
|
var userType = _accessor?.HttpContext?.User?.FindFirst(JwtIRaCISClaimType.UserTypeEnumInt);
|
|
|
|
if (userType != null && !string.IsNullOrEmpty(userType.Value))
|
|
{
|
|
return int.Parse(userType.Value) == (int)UserTypeEnum.SuperAdmin;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public bool IsZhiZhun
|
|
{
|
|
get
|
|
{
|
|
var isZhizhunClaime = _accessor?.HttpContext?.User?.FindFirst(JwtIRaCISClaimType.IsZhiZhun);
|
|
|
|
if (isZhizhunClaime != null && !string.IsNullOrEmpty(isZhizhunClaime.Value))
|
|
{
|
|
return bool.Parse(isZhizhunClaime.Value);
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public bool IsTestUser
|
|
{
|
|
get
|
|
{
|
|
var isTestUserClaime = _accessor?.HttpContext?.User?.FindFirst(JwtIRaCISClaimType.IsTestUser);
|
|
|
|
if (isTestUserClaime != null && !string.IsNullOrEmpty(isTestUserClaime.Value))
|
|
{
|
|
return bool.Parse(isTestUserClaime.Value);
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public string UserToken
|
|
{
|
|
get
|
|
{
|
|
|
|
var authorizationHeader = _accessor?.HttpContext?.Request.Headers["Authorization"].ToString();
|
|
if (!string.IsNullOrWhiteSpace(authorizationHeader))
|
|
{
|
|
return authorizationHeader.Substring(7);
|
|
|
|
}
|
|
|
|
var token = _accessor?.HttpContext?.Request.Query["access_token"].ToString();
|
|
|
|
if (!string.IsNullOrWhiteSpace(token))
|
|
{
|
|
return token;
|
|
|
|
}
|
|
return string.Empty;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
public string PermissionStr
|
|
{
|
|
get
|
|
{
|
|
var permissionStr = _accessor?.HttpContext?.User?.FindFirst(JwtIRaCISClaimType.PermissionStr);
|
|
|
|
if (permissionStr != null && !string.IsNullOrEmpty(permissionStr.Value))
|
|
{
|
|
return permissionStr.Value;
|
|
}
|
|
return string.Empty;
|
|
}
|
|
}
|
|
|
|
public string IP
|
|
{
|
|
get
|
|
{
|
|
|
|
return _accessor?.HttpContext.GetClientIP();
|
|
}
|
|
}
|
|
|
|
|
|
public string LocalIp
|
|
{
|
|
get
|
|
{
|
|
|
|
return _accessor?.HttpContext?.Connection.LocalIpAddress.MapToIPv4().ToString();
|
|
}
|
|
}
|
|
|
|
|
|
public bool IsEn_Us
|
|
{
|
|
get
|
|
{
|
|
var lan = _accessor?.HttpContext?.Request?.Headers["Accept-Language"];
|
|
|
|
if (lan is not null && !string.IsNullOrEmpty(lan.Value))
|
|
{
|
|
return lan.Value == "en-US,en;q=0.5".ToString();
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
public string RequestUrl
|
|
{
|
|
|
|
get
|
|
{
|
|
var url = _accessor?.HttpContext?.Request?.Path.ToString();
|
|
|
|
var list = url.Split('/').Where(t => !string.IsNullOrWhiteSpace(t)).ToList();
|
|
|
|
if (url.Contains("Inspection", StringComparison.OrdinalIgnoreCase))
|
|
{
|
|
list.RemoveAt(0);
|
|
|
|
return string.Join('/', list.Take(2));
|
|
}
|
|
else
|
|
{
|
|
return string.Join('/', list.Take(2));
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
public string TimeZoneId
|
|
{
|
|
|
|
get
|
|
{
|
|
var timeZoneId = _accessor?.HttpContext?.Request?.Headers["TimeZoneId"];
|
|
|
|
if (timeZoneId is not null && !string.IsNullOrEmpty(timeZoneId.Value))
|
|
{
|
|
return timeZoneId.Value;
|
|
}
|
|
|
|
//return "Etc/UTC";
|
|
return "Asia/Shanghai";
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
public Guid? SignId
|
|
{
|
|
|
|
get; set;
|
|
}
|
|
|
|
|
|
public Guid? BatchId
|
|
{
|
|
|
|
get; set;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 是否不需要记录稽查
|
|
/// </summary>
|
|
public bool IsNotNeedInspection { get; set; } = false;
|
|
|
|
/// <summary>
|
|
/// 稽查额外字符串
|
|
/// </summary>
|
|
public string AuditIdentification { get; set; } = string.Empty;
|
|
}
|
|
|
|
public static class ClaimAttributes
|
|
{
|
|
/// <summary>
|
|
/// 用户Id
|
|
/// </summary>
|
|
public const string UserId = "id";
|
|
|
|
public const string UserTypeId = "userTypeId";
|
|
|
|
/// <summary>
|
|
/// 用户名
|
|
/// </summary>
|
|
public const string UserName = "name";
|
|
|
|
/// <summary>
|
|
/// 姓名
|
|
/// </summary>
|
|
public const string RealName = "realName";
|
|
|
|
public const string ReviewerCode = "reviewerCode";
|
|
|
|
public const string UserType = "userTypeShortName";
|
|
}
|
|
|
|
public struct JwtIRaCISClaimType
|
|
{
|
|
public const string IdentityUserId = "identityUserId";
|
|
public const string UserRoleId = "userRoleId";
|
|
public const string Code = "code";
|
|
public const string UserName = "name";
|
|
public const string FullName = "fullName";
|
|
public const string UserTypeId = "userTypeId";
|
|
public const string UserTypeEnum = "userTypeEnum";
|
|
public const string UserTypeEnumName = "userTypeEnumName";
|
|
public const string UserTypeEnumInt = "userTypeEnumInt";
|
|
public const string UserTypeShortName = "userTypeShortName";
|
|
|
|
public const string IsTestUser = "isTestUser";
|
|
|
|
public const string IsZhiZhun = "isZhiZhun";
|
|
|
|
public const string PermissionStr = "permissionStr";
|
|
|
|
|
|
}
|
|
|
|
public static class HttpContextExtension
|
|
{
|
|
public static string GetClientIP(this HttpContext context)
|
|
{
|
|
//scp 服务创建的记录不能获取请求上下文
|
|
if (context != null)
|
|
{
|
|
var ip = context.Request.Headers["Cdn-Src-Ip"].FirstOrDefault();
|
|
if (!string.IsNullOrEmpty(ip))
|
|
return IpReplace(ip);
|
|
|
|
ip = context.Request.Headers["X-Forwarded-For"].FirstOrDefault();
|
|
if (!string.IsNullOrEmpty(ip))
|
|
return IpReplace(ip);
|
|
|
|
ip = context.Connection.RemoteIpAddress.ToString();
|
|
|
|
return IpReplace(ip);
|
|
}
|
|
else
|
|
{
|
|
return string.Empty;
|
|
}
|
|
}
|
|
|
|
static string IpReplace(string inip)
|
|
{
|
|
//::ffff:
|
|
//::ffff:192.168.2.131 这种IP处理
|
|
if (inip.Contains("::ffff:"))
|
|
{
|
|
inip = inip.Replace("::ffff:", "");
|
|
}
|
|
return inip;
|
|
}
|
|
}
|
|
}
|