public async Task GetListAsync()
        {
            var john = await UserRepository.GetAsync(TestData.UserJohnId);

            var david = await UserRepository.GetAsync(TestData.UserDavidId);

            var neo = await UserRepository.GetAsync(TestData.UserNeoId);

            var davidLinkUsers = await IdentityLinkUserRepository.GetListAsync(new IdentityLinkUserInfo(david.Id, david.TenantId));

            davidLinkUsers.ShouldNotBeNull();

            davidLinkUsers.ShouldContain(x => x.SourceUserId == john.Id && x.SourceTenantId == john.TenantId);
            davidLinkUsers.ShouldContain(x => x.TargetUserId == neo.Id && x.TargetTenantId == neo.TenantId);
        }
Ejemplo n.º 2
0
    public async Task <List <IdentityLinkUser> > GetListAsync(IdentityLinkUserInfo linkUserInfo, bool includeIndirect = false, CancellationToken cancellationToken = default)
    {
        using (CurrentTenant.Change(null))
        {
            var users = await IdentityLinkUserRepository.GetListAsync(linkUserInfo, cancellationToken : cancellationToken);

            if (includeIndirect == false)
            {
                return(users);
            }

            var userInfos = new List <IdentityLinkUserInfo>()
            {
                linkUserInfo
            };

            var allUsers = new List <IdentityLinkUser>();
            allUsers.AddRange(users);

            do
            {
                var nextUsers = new List <IdentityLinkUserInfo>();
                foreach (var user in users)
                {
                    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));
                    }
                }

                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());

            return(allUsers);
        }
    }