412 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			412 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;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |