278 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			278 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C#
		
	
	
using System;
 | 
						|
using System.Linq;
 | 
						|
using IRaCIS.Core.Domain.Share;
 | 
						|
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 Id
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                var id = _accessor?.HttpContext?.User?.FindFirst(JwtIRaCISClaimType.Id);
 | 
						|
                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.Name);
 | 
						|
 | 
						|
                if (name != null && !string.IsNullOrEmpty(name.Value))
 | 
						|
                {
 | 
						|
                    return name.Value;
 | 
						|
                }
 | 
						|
 | 
						|
                return "";
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        public string RealName
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                var name = _accessor?.HttpContext?.User?.FindFirst(JwtIRaCISClaimType.RealName);
 | 
						|
 | 
						|
                if (name != null && !string.IsNullOrEmpty(name.Value))
 | 
						|
                {
 | 
						|
                    return name.Value;
 | 
						|
                }
 | 
						|
 | 
						|
                return "";
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public string ReviewerCode
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                var reviewerCode = _accessor?.HttpContext?.User?.FindFirst(JwtIRaCISClaimType.Code);
 | 
						|
 | 
						|
                if (reviewerCode != null && !string.IsNullOrEmpty(reviewerCode.Value))
 | 
						|
                {
 | 
						|
                    return reviewerCode.Value;
 | 
						|
                }
 | 
						|
                return string.Empty;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        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 string UserToken
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return _accessor?.HttpContext?.Request.Headers["Authorization"].ToString()?.Substring(7);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        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?.Connection.RemoteIpAddress.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 Guid? SignId
 | 
						|
        {
 | 
						|
 | 
						|
            get; set;
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    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 Id = "id";
 | 
						|
        public const string Code = "code";
 | 
						|
        public const string Name = "name";
 | 
						|
        public const string RealName = "realName";
 | 
						|
        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 IsAdmin = "isAdmin";
 | 
						|
 | 
						|
        public const string PermissionStr = "permissionStr";
 | 
						|
 | 
						|
 | 
						|
    }
 | 
						|
}
 |