From b2ad000e07e1c87d3561b5aa94fdc88c779872f0 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期二, 18 二月 2025 22:34:54 +0800
Subject: [PATCH] 1

---
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/AspNetUser.cs |  129 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 129 insertions(+), 0 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/AspNetUser.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/AspNetUser.cs"
new file mode 100644
index 0000000..1bf7f75
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/HttpContextUser/AspNetUser.cs"
@@ -0,0 +1,129 @@
+锘縰sing 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.Authorization;
+using WIDESEA_Core.Caches;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.DB;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.Seed;
+using ICacheService = WIDESEA_Core.Caches.ICacheService;
+
+namespace WIDESEA_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; }
+    }
+}

--
Gitblit v1.9.3