using Microsoft.AspNetCore.Http;
using System;
using ZhonTai.Common.Extensions;
using ZhonTai.Admin.Core.Entities;
using ZhonTai.Admin.Domain.User;
namespace ZhonTai.Admin.Core.Auth;
///
/// 用户信息
///
public class User : IUser
{
private readonly IHttpContextAccessor _accessor;
public User(IHttpContextAccessor accessor)
{
_accessor = accessor;
}
///
/// 用户Id
///
public virtual 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 UserName
{
get
{
var name = _accessor?.HttpContext?.User?.FindFirst(ClaimAttributes.UserName);
if (name != null && name.Value.NotNull())
{
return name.Value;
}
return "";
}
}
///
/// 姓名
///
public string Name
{
get
{
var name = _accessor?.HttpContext?.User?.FindFirst(ClaimAttributes.Name);
if (name != null && name.Value.NotNull())
{
return name.Value;
}
return "";
}
}
///
/// 租户Id
///
public virtual long? TenantId
{
get
{
var tenantId = _accessor?.HttpContext?.User?.FindFirst(ClaimAttributes.TenantId);
if (tenantId != null && tenantId.Value.NotNull())
{
return tenantId.Value.ToLong();
}
return null;
}
}
///
/// 用户类型
///
public virtual UserType Type
{
get
{
var userType = _accessor?.HttpContext?.User?.FindFirst(ClaimAttributes.UserType);
if (userType != null && userType.Value.NotNull())
{
return (UserType)Enum.Parse(typeof(UserType), userType.Value, true);
}
return UserType.DefaultUser;
}
}
///
/// 默认用户
///
public virtual bool DefaultUser
{
get
{
return Type == UserType.DefaultUser;
}
}
///
/// 平台管理员
///
public virtual bool PlatformAdmin
{
get
{
return Type == UserType.PlatformAdmin;
}
}
///
/// 租户管理员
///
public virtual bool TenantAdmin
{
get
{
return Type == UserType.TenantAdmin;
}
}
///
/// 租户类型
///
public virtual TenantType? TenantType
{
get
{
var tenantType = _accessor?.HttpContext?.User?.FindFirst(ClaimAttributes.TenantType);
if (tenantType != null && tenantType.Value.NotNull())
{
return (TenantType)Enum.Parse(typeof(TenantType), tenantType.Value, true);
}
return null;
}
}
///
/// 数据隔离类型
///
public virtual DataIsolationType? DataIsolationType
{
get
{
var dataIsolationType = _accessor?.HttpContext?.User?.FindFirst(ClaimAttributes.DataIsolationType);
if (dataIsolationType != null && dataIsolationType.Value.NotNull())
{
return (DataIsolationType)Enum.Parse(typeof(DataIsolationType), dataIsolationType.Value, true);
}
return null;
}
}
}