Browse Source

Always change current tenant to host in IdentityLinkUserManager.

pull/7953/head
maliming 6 years ago
parent
commit
6df634bb28
  1. 94
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserLinkManager.cs

94
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserLinkManager.cs

@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
@ -25,63 +24,66 @@ namespace Volo.Abp.Identity
public async Task<List<IdentityLinkUser>> GetListAsync(IdentityLinkUserInfo linkUserInfo, bool includeIndirect = false, CancellationToken cancellationToken = default)
{
var users = await IdentityLinkUserRepository.GetListAsync(linkUserInfo, cancellationToken: cancellationToken);
if (includeIndirect == false)
using (CurrentTenant.Change(null))
{
return users;
}
var users = await IdentityLinkUserRepository.GetListAsync(linkUserInfo, cancellationToken: cancellationToken);
if (includeIndirect == false)
{
return users;
}
var userInfos = new List<IdentityLinkUserInfo>()
{
linkUserInfo
};
var userInfos = new List<IdentityLinkUserInfo>()
{
linkUserInfo
};
var allUsers = new List<IdentityLinkUser>();
allUsers.AddRange(users);
var allUsers = new List<IdentityLinkUser>();
allUsers.AddRange(users);
do
{
var nextUsers = new List<IdentityLinkUserInfo>();
foreach (var user in users)
do
{
if (userInfos.Any(x => x.TenantId != user.SourceTenantId || x.UserId != user.SourceUserId))
var nextUsers = new List<IdentityLinkUserInfo>();
foreach (var user in users)
{
nextUsers.Add(new IdentityLinkUserInfo(user.SourceUserId, user.SourceTenantId));
if (userInfos.Any(x => x.TenantId != user.SourceTenantId || x.UserId != user.SourceUserId))
{
nextUsers.Add(new IdentityLinkUserInfo(user.SourceUserId, user.SourceTenantId));
}
if (userInfos.Any(x => x.TenantId != user.TargetTenantId || x.UserId != user.TargetUserId))
{
nextUsers.Add(new IdentityLinkUserInfo(user.TargetUserId, user.TargetTenantId));
}
}
if (userInfos.Any(x => x.TenantId != user.TargetTenantId || x.UserId != user.TargetUserId))
users = new List<IdentityLinkUser>();
foreach (var next in nextUsers)
{
nextUsers.Add(new IdentityLinkUserInfo(user.TargetUserId, user.TargetTenantId));
users.AddRange(await IdentityLinkUserRepository.GetListAsync(next, userInfos, cancellationToken));
}
}
users = new List<IdentityLinkUser>();
foreach (var next in nextUsers)
{
users.AddRange(await IdentityLinkUserRepository.GetListAsync(next, userInfos, cancellationToken));
}
userInfos.AddRange(nextUsers);
allUsers.AddRange(users);
} while (users.Any());
userInfos.AddRange(nextUsers);
allUsers.AddRange(users);
} while (users.Any());
return allUsers;
return allUsers;
}
}
public virtual async Task LinkAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser, CancellationToken cancellationToken = default)
{
if (sourceLinkUser.UserId == targetLinkUser.UserId && sourceLinkUser.TenantId == targetLinkUser.TenantId)
using (CurrentTenant.Change(null))
{
return;
}
if (sourceLinkUser.UserId == targetLinkUser.UserId && sourceLinkUser.TenantId == targetLinkUser.TenantId)
{
return;
}
if (await IsLinkedAsync(sourceLinkUser, targetLinkUser, cancellationToken: cancellationToken))
{
return;
}
if (await IsLinkedAsync(sourceLinkUser, targetLinkUser, cancellationToken: cancellationToken))
{
return;
}
using (CurrentTenant.Change(null))
{
var userLink = new IdentityLinkUser(
GuidGenerator.Create(),
sourceLinkUser,
@ -96,7 +98,7 @@ namespace Volo.Abp.Identity
{
if (includeIndirect)
{
return (await IdentityLinkUserRepository.GetListAsync(sourceLinkUser, cancellationToken: cancellationToken))
return (await GetListAsync(sourceLinkUser, true, cancellationToken: cancellationToken))
.Any(x => x.SourceTenantId == targetLinkUser.TenantId && x.SourceUserId == targetLinkUser.UserId ||
x.TargetTenantId == targetLinkUser.TenantId && x.TargetUserId == targetLinkUser.UserId);
}
@ -106,13 +108,13 @@ namespace Volo.Abp.Identity
public virtual async Task UnlinkAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser, CancellationToken cancellationToken = default)
{
if (!await IsLinkedAsync(sourceLinkUser, targetLinkUser, cancellationToken: cancellationToken))
{
return;
}
using (CurrentTenant.Change(null))
{
if (!await IsLinkedAsync(sourceLinkUser, targetLinkUser, cancellationToken: cancellationToken))
{
return;
}
var linkedUser = await IdentityLinkUserRepository.FindAsync(sourceLinkUser, targetLinkUser, cancellationToken);
if (linkedUser != null)
{

Loading…
Cancel
Save