Add ICurrentImpersonatorUser & ICurrentImpersonatorTenant.

pull/5190/head
maliming 5 years ago
parent 2a784d2de0
commit c34c562c5e

@ -0,0 +1,19 @@
using System;
using System.Security.Principal;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Security.Claims;
namespace Volo.Abp.MultiTenancy
{
public class CurrentImpersonatorTenant : ICurrentImpersonatorTenant, ITransientDependency
{
public virtual Guid? Id => _principalAccessor.Principal?.FindImpersonatorTenantId();
private readonly ICurrentPrincipalAccessor _principalAccessor;
public CurrentImpersonatorTenant(ICurrentPrincipalAccessor principalAccessor)
{
_principalAccessor = principalAccessor;
}
}
}

@ -0,0 +1,11 @@
using System;
using JetBrains.Annotations;
namespace Volo.Abp.MultiTenancy
{
public interface ICurrentImpersonatorTenant
{
[CanBeNull]
Guid? Id { get; }
}
}

@ -39,6 +39,37 @@ namespace System.Security.Principal
return Guid.Parse(userIdOrNull.Value);
}
public static Guid? FindImpersonatorUserId([NotNull] this ClaimsPrincipal principal)
{
Check.NotNull(principal, nameof(principal));
var impersonatorUserIdOrNull = principal.Claims?.FirstOrDefault(c => c.Type == AbpClaimTypes.ImpersonatorUserId);
if (impersonatorUserIdOrNull == null || impersonatorUserIdOrNull.Value.IsNullOrWhiteSpace())
{
return null;
}
if (Guid.TryParse(impersonatorUserIdOrNull.Value, out Guid result))
{
return result;
}
return null;
}
public static Guid? FindImpersonatorUserId([NotNull] this IIdentity identity)
{
Check.NotNull(identity, nameof(identity));
var claimsIdentity = identity as ClaimsIdentity;
var impersonatorUserIdOrNull = claimsIdentity?.Claims?.FirstOrDefault(c => c.Type == AbpClaimTypes.ImpersonatorUserId);
if (impersonatorUserIdOrNull == null || impersonatorUserIdOrNull.Value.IsNullOrWhiteSpace())
{
return null;
}
return Guid.Parse(impersonatorUserIdOrNull.Value);
}
public static Guid? FindTenantId([NotNull] this ClaimsPrincipal principal)
{
Check.NotNull(principal, nameof(principal));
@ -67,6 +98,34 @@ namespace System.Security.Principal
return Guid.Parse(tenantIdOrNull.Value);
}
public static Guid? FindImpersonatorTenantId([NotNull] this ClaimsPrincipal principal)
{
Check.NotNull(principal, nameof(principal));
var impersonatorTenantIdOrNull = principal.Claims?.FirstOrDefault(c => c.Type == AbpClaimTypes.ImpersonatorTenantId);
if (impersonatorTenantIdOrNull == null || impersonatorTenantIdOrNull.Value.IsNullOrWhiteSpace())
{
return null;
}
return Guid.Parse(impersonatorTenantIdOrNull.Value);
}
public static Guid? FindImpersonatorTenantId([NotNull] this IIdentity identity)
{
Check.NotNull(identity, nameof(identity));
var claimsIdentity = identity as ClaimsIdentity;
var impersonatorTenantIdOrNull = claimsIdentity?.Claims?.FirstOrDefault(c => c.Type == AbpClaimTypes.ImpersonatorTenantId);
if (impersonatorTenantIdOrNull == null || impersonatorTenantIdOrNull.Value.IsNullOrWhiteSpace())
{
return null;
}
return Guid.Parse(impersonatorTenantIdOrNull.Value);
}
public static string FindClientId([NotNull] this ClaimsPrincipal principal)
{
Check.NotNull(principal, nameof(principal));

@ -18,6 +18,11 @@ namespace Volo.Abp.Security.Claims
/// </summary>
public static string UserId { get; set; } = ClaimTypes.NameIdentifier;
/// <summary>
/// Default: "impersonator_userid".
/// </summary>
public static string ImpersonatorUserId { get; set; } = "impersonator_userid";
/// <summary>
/// Default: <see cref="ClaimTypes.Role"/>
/// </summary>
@ -48,6 +53,10 @@ namespace Volo.Abp.Security.Claims
/// </summary>
public static string TenantId { get; set; } = "tenantid";
/// <summary>
/// Default: "impersonator_tenantid".
/// </summary>
public static string ImpersonatorTenantId { get; set; } = "impersonator_tenantid";
/// <summary>
/// Default: "editionid".

@ -0,0 +1,19 @@
using System;
using System.Security.Principal;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Security.Claims;
namespace Volo.Abp.Users
{
public class CurrentImpersonatorUser : ICurrentImpersonatorUser, ITransientDependency
{
public virtual Guid? Id => _principalAccessor.Principal?.FindImpersonatorUserId();
private readonly ICurrentPrincipalAccessor _principalAccessor;
public CurrentImpersonatorUser(ICurrentPrincipalAccessor principalAccessor)
{
_principalAccessor = principalAccessor;
}
}
}

@ -0,0 +1,11 @@
using System;
using JetBrains.Annotations;
namespace Volo.Abp.Users
{
public interface ICurrentImpersonatorUser
{
[CanBeNull]
Guid? Id { get; }
}
}
Loading…
Cancel
Save