From bf9cdbba26620ec641e0b7d1cf423b3c934e144f Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 5 Mar 2021 12:34:20 +0800 Subject: [PATCH] Add includeIndirect parameter to IsLinkedAsync method. --- .../Abp/Identity/IdentityUserLinkManager.cs | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserLinkManager.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserLinkManager.cs index 967296bc28..3e979b6420 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserLinkManager.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserLinkManager.cs @@ -23,8 +23,7 @@ namespace Volo.Abp.Identity CurrentTenant = currentTenant; } - public async Task> GetListAsync(IdentityLinkUserInfo linkUserInfo, - bool includeIndirect = false, CancellationToken cancellationToken = default) + public async Task> GetListAsync(IdentityLinkUserInfo linkUserInfo, bool includeIndirect = false, CancellationToken cancellationToken = default) { var users = await IdentityLinkUserRepository.GetListAsync(linkUserInfo, cancellationToken: cancellationToken); if (includeIndirect == false) @@ -59,7 +58,7 @@ namespace Volo.Abp.Identity users = new List(); foreach (var next in nextUsers) { - users.AddRange(await IdentityLinkUserRepository.GetListAsync(next, userInfos, cancellationToken: cancellationToken)); + users.AddRange(await IdentityLinkUserRepository.GetListAsync(next, userInfos, cancellationToken)); } userInfos.AddRange(nextUsers); @@ -69,14 +68,14 @@ namespace Volo.Abp.Identity return allUsers; } - public virtual async Task LinkAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser) + public virtual async Task LinkAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser, CancellationToken cancellationToken = default) { if (sourceLinkUser.UserId == targetLinkUser.UserId && sourceLinkUser.TenantId == targetLinkUser.TenantId) { return; } - if (await IsLinkedAsync(sourceLinkUser, targetLinkUser)) + if (await IsLinkedAsync(sourceLinkUser, targetLinkUser, cancellationToken: cancellationToken)) { return; } @@ -87,36 +86,42 @@ namespace Volo.Abp.Identity GuidGenerator.Create(), sourceLinkUser, targetLinkUser); - await IdentityLinkUserRepository.InsertAsync(userLink, true); + await IdentityLinkUserRepository.InsertAsync(userLink, true, cancellationToken); } } - public virtual async Task IsLinkedAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser) + public virtual async Task IsLinkedAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser, bool includeIndirect = false, CancellationToken cancellationToken = default) { using (CurrentTenant.Change(null)) { - return await IdentityLinkUserRepository.FindAsync(sourceLinkUser, targetLinkUser) != null; + if (includeIndirect) + { + return (await IdentityLinkUserRepository.GetListAsync(sourceLinkUser, cancellationToken: cancellationToken)) + .Any(x => x.SourceTenantId == targetLinkUser.TenantId && x.SourceUserId == targetLinkUser.UserId || + x.TargetTenantId == targetLinkUser.TenantId && x.TargetUserId == targetLinkUser.UserId); + } + return await IdentityLinkUserRepository.FindAsync(sourceLinkUser, targetLinkUser, cancellationToken) != null; } } - public virtual async Task UnlinkAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser) + public virtual async Task UnlinkAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser, CancellationToken cancellationToken = default) { - if (!await IsLinkedAsync(sourceLinkUser, targetLinkUser)) + if (!await IsLinkedAsync(sourceLinkUser, targetLinkUser, cancellationToken: cancellationToken)) { return; } using (CurrentTenant.Change(null)) { - var linkedUser = await IdentityLinkUserRepository.FindAsync(sourceLinkUser, targetLinkUser); + var linkedUser = await IdentityLinkUserRepository.FindAsync(sourceLinkUser, targetLinkUser, cancellationToken); if (linkedUser != null) { - await IdentityLinkUserRepository.DeleteAsync(linkedUser); + await IdentityLinkUserRepository.DeleteAsync(linkedUser, cancellationToken: cancellationToken); } } } - public virtual async Task GenerateLinkTokenAsync(IdentityLinkUserInfo targetLinkUser) + public virtual async Task GenerateLinkTokenAsync(IdentityLinkUserInfo targetLinkUser, CancellationToken cancellationToken = default) { using (CurrentTenant.Change(targetLinkUser.TenantId)) { @@ -128,7 +133,7 @@ namespace Volo.Abp.Identity } } - public virtual async Task VerifyLinkTokenAsync(IdentityLinkUserInfo targetLinkUser, string token) + public virtual async Task VerifyLinkTokenAsync(IdentityLinkUserInfo targetLinkUser, string token, CancellationToken cancellationToken = default) { using (CurrentTenant.Change(targetLinkUser.TenantId)) {