using Ropin.Inspection.Common.Accessor.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
namespace Ropin.Inspection.Common.Accessor
{
public class ClaimsAccessor : IClaimsAccessor
{
protected IPrincipalAccessor PrincipalAccessor { get; }
public ClaimsAccessor(IPrincipalAccessor principalAccessor)
{
PrincipalAccessor = principalAccessor;
}
///
/// 登录用户ID
///
public Guid ApiUserId
{
get
{
var userId = PrincipalAccessor.Principal?.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier)?.Value;
if (userId != null)
{
return Guid.Parse(userId);
}else
{
throw new Exception("登录用户ID不存在");
}
//return Guid.Empty;
}
}
///
/// 登录用户名称
///
public string ApiUserName
{
get
{
var userName = PrincipalAccessor.Principal?.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name)?.Value;
if (string.IsNullOrWhiteSpace(userName))
{
return string.Empty;
}
return userName;
}
}
///
/// 用户角色Id
///
public string RoleIds
{
get
{
var roleIds = PrincipalAccessor.Principal?.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Role)?.Value;
if (string.IsNullOrWhiteSpace(roleIds))
{
return string.Empty;
}
return roleIds;
}
}
///
/// 组织架构ID
///
public Guid OrganizeId
{
get
{
var primaryGroupSid = PrincipalAccessor.Principal?.Claims.FirstOrDefault(c => c.Type == ClaimTypes.PrimaryGroupSid)?.Value;
if (!string.IsNullOrEmpty(primaryGroupSid) )
{
return Guid.Parse(primaryGroupSid);
}
else
{
throw new Exception("组织架构不存在");
}
}
}
///
/// LinsenceCode
///
public string Linsence
{
get
{
var primaryLinsence = PrincipalAccessor.Principal?.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Rsa)?.Value;
if (string.IsNullOrEmpty(primaryLinsence))
{
//throw new Exception("LinsenceCode不存在");
return null;
}
else
{
return primaryLinsence;
}
}
}
///
/// LicenseTypeCode
///
public string LicenseTypeCode
{
get
{
var licenseTypeCode = PrincipalAccessor.Principal?.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid)?.Value;
if (string.IsNullOrEmpty(licenseTypeCode))
{
//throw new Exception("LicenseTypeCode不存在");
return null;
}
else
{
return licenseTypeCode;
}
}
}
///
/// 用户组织架构类型
///
public string OrgTypeCode
{
get
{
var orgTypeCode = PrincipalAccessor.Principal?.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Actor)?.Value;
if (string.IsNullOrEmpty(orgTypeCode))
{
throw new Exception("组织架构类型不存在");
}
else
{
return orgTypeCode;
}
}
}
}
}