using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using Microsoft.AspNetCore.Http;
namespace Admin.Core.Common.Auth
{
///
/// 用户信息
///
public class User : IUser
{
private readonly IHttpContextAccessor _accessor;
public User(IHttpContextAccessor accessor)
{
_accessor = accessor;
}
///
/// 用户Id
///
public long Id
{
get
{
var id = _accessor?.HttpContext?.User?.FindFirst(ClaimAttributes.UserId);
if (id != null && id.Value.NotNull())
{
return id.Value.ToLong();
}
return 0;
}
}
///
/// 用户名
///
public string Name
{
get
{
var name = _accessor?.HttpContext?.User?.FindFirst(ClaimAttributes.UserName);
if (name != null && name.Value.NotNull())
{
return name.Value;
}
return "";
}
}
///
/// 用户IP
///
public string IP
{
get
{
if (_accessor?.HttpContext?.Connection == null)
return "";
return _accessor.HttpContext.Connection.RemoteIpAddress.ToString();
}
}
///
/// 用户IPv4
///
public string IPv4
{
get
{
if (_accessor?.HttpContext?.Connection == null)
return "";
return _accessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
}
}
///
/// 用户IPv6
///
public string IPv6
{
get
{
if (_accessor?.HttpContext?.Connection == null)
return "";
return _accessor.HttpContext.Connection.RemoteIpAddress.MapToIPv6().ToString();
}
}
public bool IsAuthenticated()
{
return _accessor.HttpContext.User.Identity.IsAuthenticated;
}
public IEnumerable GetClaimsIdentity()
{
return _accessor.HttpContext.User.Claims;
}
public List GetClaimValueByType(string ClaimType)
{
return (from item in GetClaimsIdentity()
where item.Type == ClaimType
select item.Value).ToList();
}
}
///
/// Claim属性
///
public static class ClaimAttributes
{
///
/// 用户Id
///
public const string UserId = "id";
///
/// 用户名
///
public const string UserName = "na";
}
}