Ejemplo n.º 1
0
 public virtual async Task <bool> IsLinkedAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser)
 {
     using (CurrentTenant.Change(null))
     {
         return(await IdentityLinkUserRepository.FindAsync(sourceLinkUser, targetLinkUser) != null);
     }
 }
Ejemplo n.º 2
0
        public async Task GetListAsync_Indirect_Test()
        {
            var a = Guid.NewGuid();
            var b = Guid.NewGuid();
            var c = Guid.NewGuid();
            var d = Guid.NewGuid();
            var e = Guid.NewGuid();
            var f = Guid.NewGuid();
            var g = Guid.NewGuid();
            var h = Guid.NewGuid();
            var i = Guid.NewGuid();

            await IdentityLinkUserRepository.InsertAsync(new IdentityLinkUser(
                                                             Guid.NewGuid(),
                                                             new IdentityLinkUserInfo(a, null),
                                                             new IdentityLinkUserInfo(b, null)), true);

            await IdentityLinkUserRepository.InsertAsync(new IdentityLinkUser(
                                                             Guid.NewGuid(),
                                                             new IdentityLinkUserInfo(c, null),
                                                             new IdentityLinkUserInfo(a, null)), true);

            await IdentityLinkUserRepository.InsertAsync(new IdentityLinkUser(
                                                             Guid.NewGuid(),
                                                             new IdentityLinkUserInfo(d, null),
                                                             new IdentityLinkUserInfo(c, null)), true);

            await IdentityLinkUserRepository.InsertAsync(new IdentityLinkUser(
                                                             Guid.NewGuid(),
                                                             new IdentityLinkUserInfo(e, null),
                                                             new IdentityLinkUserInfo(c, null)), true);

            await IdentityLinkUserRepository.InsertAsync(new IdentityLinkUser(
                                                             Guid.NewGuid(),
                                                             new IdentityLinkUserInfo(f, null),
                                                             new IdentityLinkUserInfo(e, null)), true);

            await IdentityLinkUserRepository.InsertAsync(new IdentityLinkUser(
                                                             Guid.NewGuid(),
                                                             new IdentityLinkUserInfo(g, null),
                                                             new IdentityLinkUserInfo(h, null)), true);

            await IdentityLinkUserRepository.InsertAsync(new IdentityLinkUser(
                                                             Guid.NewGuid(),
                                                             new IdentityLinkUserInfo(i, null),
                                                             new IdentityLinkUserInfo(h, null)), true);

            var linkUsers = await IdentityLinkUserManager.GetListAsync(new IdentityLinkUserInfo(a, null), includeIndirect : true);

            linkUsers.Count.ShouldBe(5);

            linkUsers = await IdentityLinkUserManager.GetListAsync(new IdentityLinkUserInfo(f, null), includeIndirect : true);

            linkUsers.Count.ShouldBe(5);

            linkUsers = await IdentityLinkUserManager.GetListAsync(new IdentityLinkUserInfo(g, null), includeIndirect : true);

            linkUsers.Count.ShouldBe(2);
        }
Ejemplo n.º 3
0
 public virtual async Task <bool> IsLinkedAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser, bool includeIndirect = false, CancellationToken cancellationToken = default)
 {
     using (CurrentTenant.Change(null))
     {
         if (includeIndirect)
         {
             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));
         }
         return(await IdentityLinkUserRepository.FindAsync(sourceLinkUser, targetLinkUser, cancellationToken) != null);
     }
 }
Ejemplo n.º 4
0
        public virtual async Task UnlinkAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser)
        {
            if (!await IsLinkedAsync(sourceLinkUser, targetLinkUser))
            {
                return;
            }

            var linkedUser = await IdentityLinkUserRepository.FindAsync(sourceLinkUser, targetLinkUser);

            if (linkedUser != null)
            {
                await IdentityLinkUserRepository.DeleteAsync(linkedUser);
            }
        }
Ejemplo n.º 5
0
        public virtual async Task UnlinkAsync()
        {
            var john = await UserRepository.GetAsync(TestData.UserJohnId);

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

            (await IdentityLinkUserRepository.FindAsync(new IdentityLinkUserInfo(john.Id, john.TenantId),
                                                        new IdentityLinkUserInfo(david.Id, david.TenantId))).ShouldNotBeNull();

            await IdentityLinkUserManager.UnlinkAsync(new IdentityLinkUserInfo(john.Id, john.TenantId),
                                                      new IdentityLinkUserInfo(david.Id, david.TenantId));

            (await IdentityLinkUserRepository.FindAsync(new IdentityLinkUserInfo(john.Id, john.TenantId),
                                                        new IdentityLinkUserInfo(david.Id, david.TenantId))).ShouldBeNull();
        }
        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.º 7
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);
        }
    }
Ejemplo n.º 8
0
    public virtual async Task UnlinkAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser, CancellationToken cancellationToken = default)
    {
        using (CurrentTenant.Change(null))
        {
            if (!await IsLinkedAsync(sourceLinkUser, targetLinkUser, cancellationToken: cancellationToken))
            {
                return;
            }

            var linkedUser = await IdentityLinkUserRepository.FindAsync(sourceLinkUser, targetLinkUser, cancellationToken);

            if (linkedUser != null)
            {
                await IdentityLinkUserRepository.DeleteAsync(linkedUser, cancellationToken : cancellationToken);
            }
        }
    }
Ejemplo n.º 9
0
        public virtual async Task LinkAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser)
        {
            if (sourceLinkUser.UserId == targetLinkUser.UserId && sourceLinkUser.TenantId == targetLinkUser.TenantId)
            {
                return;
            }

            if (await IsLinkedAsync(sourceLinkUser, targetLinkUser))
            {
                return;
            }

            var userLink = new IdentityLinkUser(
                GuidGenerator.Create(),
                sourceLinkUser,
                targetLinkUser);
            await IdentityLinkUserRepository.InsertAsync(userLink, true);
        }
Ejemplo n.º 10
0
    public virtual async Task LinkAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser, CancellationToken cancellationToken = default)
    {
        using (CurrentTenant.Change(null))
        {
            if (sourceLinkUser.UserId == targetLinkUser.UserId && sourceLinkUser.TenantId == targetLinkUser.TenantId)
            {
                return;
            }

            if (await IsLinkedAsync(sourceLinkUser, targetLinkUser, cancellationToken: cancellationToken))
            {
                return;
            }

            var userLink = new IdentityLinkUser(
                GuidGenerator.Create(),
                sourceLinkUser,
                targetLinkUser);
            await IdentityLinkUserRepository.InsertAsync(userLink, true, cancellationToken);
        }
    }
Ejemplo n.º 11
0
        public virtual async Task LinkAsync()
        {
            var john = await UserRepository.GetAsync(TestData.UserJohnId);

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

            (await IdentityLinkUserRepository.FindAsync(new IdentityLinkUserInfo(john.Id, john.TenantId),
                                                        new IdentityLinkUserInfo(neo.Id, neo.TenantId))).ShouldBeNull();

            await IdentityLinkUserManager.LinkAsync(new IdentityLinkUserInfo(john.Id, john.TenantId),
                                                    new IdentityLinkUserInfo(neo.Id, neo.TenantId));

            var linkUser = await IdentityLinkUserRepository.FindAsync(new IdentityLinkUserInfo(john.Id, john.TenantId),
                                                                      new IdentityLinkUserInfo(neo.Id, neo.TenantId));

            linkUser.ShouldNotBeNull();
            linkUser.SourceUserId.ShouldBe(john.Id);
            linkUser.SourceTenantId.ShouldBe(john.TenantId);

            linkUser.TargetUserId.ShouldBe(neo.Id);
            linkUser.TargetTenantId.ShouldBe(neo.TenantId);
        }
        public async Task FindAsync()
        {
            var john = await UserRepository.GetAsync(TestData.UserJohnId);

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

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

            var johnAndDavidLinkUser = await IdentityLinkUserRepository.FindAsync(
                new IdentityLinkUserInfo(john.Id, john.TenantId),
                new IdentityLinkUserInfo(david.Id, david.TenantId));

            johnAndDavidLinkUser.ShouldNotBeNull();
            johnAndDavidLinkUser.SourceUserId.ShouldBe(john.Id);
            johnAndDavidLinkUser.SourceTenantId.ShouldBe(john.TenantId);
            johnAndDavidLinkUser.TargetUserId.ShouldBe(david.Id);
            johnAndDavidLinkUser.TargetTenantId.ShouldBe(david.TenantId);

            (await IdentityLinkUserRepository.FindAsync(
                 new IdentityLinkUserInfo(john.Id, john.TenantId),
                 new IdentityLinkUserInfo(neo.Id, neo.TenantId))).ShouldBeNull();
        }
Ejemplo n.º 13
0
 public virtual async Task <bool> IsLinkedAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser)
 {
     return(await IdentityLinkUserRepository.FindAsync(sourceLinkUser, targetLinkUser) != null);
 }