using Atomx.Common.Constants; using Atomx.Utils.Extension; namespace Atomx.Admin.Services { /// /// /// public interface IIdentityService { /// /// 获取用户ID /// /// long GetUserId(); /// /// 获取用户角色ID /// /// int GetUserRoleId(); /// /// 获取客户端IP /// /// string GetClientIp(); /// /// 获取用户设置的时区 /// /// int GetTimeZone(); /// /// 获取用户代理信息 /// /// string GetUserAgent(); } /// /// /// public class IdentityService : IIdentityService { IHttpContextAccessor _httpContextAccessor; /// /// /// /// public IdentityService(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } /// /// 获取用户ID /// /// public long GetUserId() { //var userIdClaim = _httpContextAccessor.HttpContext?.User.FindFirst(ClaimKeys.Id); //return userIdClaim != null ? long.Parse(userIdClaim.Value) : 0; var id = _httpContextAccessor.HttpContext?.User?.Claims?.SingleOrDefault(p => p.Type == ClaimKeys.UId)?.Value ?? "0"; return id.ToLong(); } /// /// 获取用户角色ID /// /// public int GetUserRoleId() { //var userIdClaim = _httpContextAccessor.HttpContext?.User.FindFirst(ClaimKeys.Role); //return userIdClaim != null ? int.Parse(userIdClaim.Value) : 0; var id = _httpContextAccessor.HttpContext?.User?.Claims?.SingleOrDefault(p => p.Type == ClaimKeys.Role)?.Value ?? "0"; return id.ToInt(); } /// /// 获取客户端IP /// /// public string GetClientIp() { var ipAddress = _httpContextAccessor.HttpContext?.Request.Headers["X-Forwarded-For"].FirstOrDefault(); if (ipAddress == null) { ipAddress = _httpContextAccessor.HttpContext?.Request.Headers["X-Real-IP"].FirstOrDefault(); if (ipAddress == null) { ipAddress = _httpContextAccessor.HttpContext?.Connection.RemoteIpAddress?.ToString() ?? ""; } } return ipAddress; } /// /// 获取用户设置的时区 /// /// public int GetTimeZone() { var timeZone = _httpContextAccessor.HttpContext?.User?.Claims?.SingleOrDefault(p => p.Type == "TimeZone")?.Value ?? "0"; return timeZone.ToInt(); } public string GetUserAgent() { return _httpContextAccessor.HttpContext?.Request.Headers["User-Agent"].FirstOrDefault() ?? ""; } } }