From ca1f2e9e8e03a2b55fbd87c454483881941f3c79 Mon Sep 17 00:00:00 2001 From: ddrsql Date: Wed, 3 Apr 2019 16:50:25 +0800 Subject: [PATCH 1/2] Docking with third-party OAuth services for ease of rewriting CurrentUser --- .../Permissions/ClientPermissionValueProvider.cs | 10 ++++++---- .../Permissions/RolePermissionValueProvider.cs | 10 +++++++--- .../Permissions/UserPermissionValueProvider.cs | 9 ++++++--- ...CurrentClaimsPrincipalTenantResolveContributor.cs | 12 ++++-------- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/ClientPermissionValueProvider.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/ClientPermissionValueProvider.cs index 87b391443d..ec827f83a4 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/ClientPermissionValueProvider.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/ClientPermissionValueProvider.cs @@ -1,23 +1,25 @@ using System.Threading.Tasks; -using Volo.Abp.Security.Claims; +using Volo.Abp.Clients; namespace Volo.Abp.Authorization.Permissions { public class ClientPermissionValueProvider : PermissionValueProvider { + protected ICurrentClient CurrentClient { get; } + public const string ProviderName = "Client"; public override string Name => ProviderName; - public ClientPermissionValueProvider(IPermissionStore permissionStore) + public ClientPermissionValueProvider(ICurrentClient currentClient, IPermissionStore permissionStore) : base(permissionStore) { - + CurrentClient = currentClient; } public override async Task CheckAsync(PermissionValueCheckContext context) { - var clientId = context.Principal?.FindFirst(AbpClaimTypes.ClientId)?.Value; + var clientId = CurrentClient.Id; if (clientId == null) { diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RolePermissionValueProvider.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RolePermissionValueProvider.cs index a008190fbd..5925a3f6d4 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RolePermissionValueProvider.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RolePermissionValueProvider.cs @@ -1,24 +1,28 @@ using System.Linq; using System.Threading.Tasks; using Volo.Abp.Security.Claims; +using Volo.Abp.Users; namespace Volo.Abp.Authorization.Permissions { public class RolePermissionValueProvider : PermissionValueProvider { + protected ICurrentUser CurrentUser { get; } + public const string ProviderName = "Role"; public override string Name => ProviderName; - public RolePermissionValueProvider(IPermissionStore permissionStore) + public RolePermissionValueProvider(ICurrentUser currentUser, IPermissionStore permissionStore) : base(permissionStore) { - + CurrentUser = currentUser; } public override async Task CheckAsync(PermissionValueCheckContext context) { - var roles = context.Principal?.FindAll(AbpClaimTypes.Role).Select(c => c.Value).ToArray(); + var roles = CurrentUser.Roles; + if (roles == null || !roles.Any()) { return PermissionGrantResult.Undefined; diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs index f04a85910f..f9a6ca903e 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs @@ -1,23 +1,26 @@ using System.Threading.Tasks; using Volo.Abp.Security.Claims; +using Volo.Abp.Users; namespace Volo.Abp.Authorization.Permissions { public class UserPermissionValueProvider : PermissionValueProvider { + protected ICurrentUser CurrentUser { get; } + public const string ProviderName = "User"; public override string Name => ProviderName; - public UserPermissionValueProvider(IPermissionStore permissionStore) + public UserPermissionValueProvider(ICurrentUser currentUser, IPermissionStore permissionStore) : base(permissionStore) { - + CurrentUser = currentUser; } public override async Task CheckAsync(PermissionValueCheckContext context) { - var userId = context.Principal?.FindFirst(AbpClaimTypes.UserId)?.Value; + var userId = CurrentUser.Id.ToString(); if (userId == null) { diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentClaimsPrincipalTenantResolveContributor.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentClaimsPrincipalTenantResolveContributor.cs index 0f213ea1d7..c2e28d1222 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentClaimsPrincipalTenantResolveContributor.cs +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentClaimsPrincipalTenantResolveContributor.cs @@ -1,6 +1,5 @@ -using System.Linq; using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.Security.Claims; +using Volo.Abp.Users; namespace Volo.Abp.MultiTenancy { @@ -12,17 +11,14 @@ namespace Volo.Abp.MultiTenancy public override void Resolve(ITenantResolveContext context) { - var principal = context.ServiceProvider.GetRequiredService().Principal; - if (principal?.Identity?.IsAuthenticated != true) + var currentUser = context.ServiceProvider.GetRequiredService(); + if (currentUser.IsAuthenticated != true) { return; } context.Handled = true; - context.TenantIdOrName = principal - .Claims - .FirstOrDefault(c => c.Type == AbpClaimTypes.TenantId) - ?.Value; + context.TenantIdOrName = currentUser.TenantId.ToString(); } } } \ No newline at end of file From f4e4380bfd338cdc8ac068e9c3c3bc80be9709a4 Mon Sep 17 00:00:00 2001 From: ddrsql Date: Wed, 10 Apr 2019 10:24:46 +0800 Subject: [PATCH 2/2] Updates --- .../Authorization/Permissions/UserPermissionValueProvider.cs | 2 +- .../CurrentClaimsPrincipalTenantResolveContributor.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs index f9a6ca903e..9203467a5a 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs @@ -20,7 +20,7 @@ namespace Volo.Abp.Authorization.Permissions public override async Task CheckAsync(PermissionValueCheckContext context) { - var userId = CurrentUser.Id.ToString(); + var userId = CurrentUser.Id?.ToString(); if (userId == null) { diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentClaimsPrincipalTenantResolveContributor.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentClaimsPrincipalTenantResolveContributor.cs index c2e28d1222..61e49cea81 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentClaimsPrincipalTenantResolveContributor.cs +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentClaimsPrincipalTenantResolveContributor.cs @@ -18,7 +18,7 @@ namespace Volo.Abp.MultiTenancy } context.Handled = true; - context.TenantIdOrName = currentUser.TenantId.ToString(); + context.TenantIdOrName = currentUser.TenantId?.ToString(); } } } \ No newline at end of file