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 WIDESEAWCS_Core.Const; 
 | 
using WIDESEAWCS_Core.DB; 
 | 
using WIDESEAWCS_Core.Helper; 
 | 
using WIDESEAWCS_Core.Seed; 
 | 
using ICacheService = WIDESEAWCS_Core.Caches.ICacheService; 
 | 
  
 | 
namespace WIDESEAWCS_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 int MenuType => (_accessor.HttpContext?.Request.Headers.ContainsKey("uniapp") ?? false) ? 1 : 0; 
 | 
  
 | 
        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; } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 使用下面的DeptIds字段 
 | 
        /// </summary> 
 | 
  
 | 
        [Obsolete] 
 | 
  
 | 
        public int DeptId { get; set; } 
 | 
  
 | 
  
 | 
        public List<Guid> DeptIds { get; set; } 
 | 
  
 | 
        public string Token { get; set; } 
 | 
  
 | 
        public string Token_ID { get; set; } 
 | 
    } 
 | 
} 
 |