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() ?? "";
}
}
}