예제 #1
0
        public void CreateParentChildGroups()
        {
            var connection      = new ConnectionSettingProvider();
            var metadataElastic = new ElasticClient(
                connection.Get()
                .DefaultIndex("es.info.metadata"));

            var attachmentProcessor = new AttachmentProcessor();

            var metadataRepo = new MetadataRepository(metadataElastic);
            var metadataInfo = new InformationRepository(metadataElastic, attachmentProcessor, new ItemMetadataProvider(metadataRepo));


            var childGroup1 = new ChildGroup
            {
                SortOrder = 1,
                Title     = "child 1"
            };

            var childGroup2 = new ChildGroup
            {
                SortOrder = 2,
                Title     = "child 2"
            };

            var grandChild = new ChildGroup
            {
                SortOrder = 1,
                Title     = "grandchild"
            };

            var rootGroup = new RootGroup
            {
                Title = "root"
            };

            attachmentProcessor.Attach(childGroup1, rootGroup);
            attachmentProcessor.Attach(childGroup2, rootGroup);
            attachmentProcessor.Attach(grandChild, childGroup1);

            attachmentProcessor.Attach(grandChild, rootGroup);
            attachmentProcessor.Attach(childGroup1, rootGroup);
            attachmentProcessor.Attach(childGroup2, rootGroup);

            metadataInfo.Save(rootGroup);
            metadataInfo.Save(childGroup1);
            metadataInfo.Save(childGroup2);
            metadataInfo.Save(grandChild);
        }
        public async Task <Group> AddChildGroups(Group group, IEnumerable <Group> childGroups)
        {
            foreach (var childGroup in childGroups)
            {
                var newChildGroup = new ChildGroup
                {
                    ParentGroupId = group.Id,
                    ChildGroupId  = childGroup.Id
                };

                AuthorizationDbContext.ChildGroups.Add(newChildGroup);
                group.Children.Add(childGroup);
            }

            await AuthorizationDbContext.SaveChangesAsync();

            await EventService.RaiseEventAsync(new EntityAuditEvent <Group>(EventTypes.ChildEntityCreatedEvent, group.Id.ToString(), group));

            return(group);
        }
        public List <FullContact> GetFullContacts(ContactParameters contactParameters)
        {
            // INNER JOIN lambda

            /*return this.RepositoryContext.Contacts.Join(
             * this.RepositoryContext.Addresses,
             * contact => contact.Id,
             * address => address.ContactId,
             * (contact, address) => new FullContact
             * {
             * ZipCode = address.ZipCode,
             * City = address.City,
             * FirstName = contact.FirstName,
             * LastName = contact.LastName
             * }
             * ).ToList();*/

            // LEFT JOIN lambda

            /*return this.RepositoryContext.Contacts
             *      .GroupJoin(
             *          this.RepositoryContext.Addresses,
             *          contact => contact.Id,
             *          address => address.ContactId,
             *          (contact, address) => new { contact, address }
             *      )
             *      .SelectMany(
             *          x => x.address.DefaultIfEmpty(),
             *          (x, address) => new FullContact {
             *              FirstName = x.contact.FirstName,
             *              LastName = x.contact.LastName,
             *              City = address == null ? string.Empty : address.City,
             *              ZipCode = address == null ? 0 : address.ZipCode
             *          }
             *      ).ToList();*/

            // LEFT JOIN Query syntax

            /*var query = from contact in this.RepositoryContext.Contacts
             *                join address in this.RepositoryContext.Addresses
             *                on contact.Id equals address.ContactId
             *                into ContactAddressGroup
             *                from address in ContactAddressGroup.DefaultIfEmpty()
             *                select new FullContact
             *                {
             *                    FirstName = contact.FirstName,
             *                    LastName = contact.LastName,
             *                    Gender = contact.Gender,
             *                    ZipCode = address.ZipCode,
             *                    City = address.City,
             *                };*/

            List <FullContact> fullContacts = new List <FullContact> {
            };

            using (var context = this.RepositoryContext) {
                var query = from contact in context.Contacts
                            join child in context.Children on contact.Id equals child.ContactId
                            into ChildGroup
                            from c in ChildGroup.DefaultIfEmpty()
                            join address in context.Addresses on contact.Id equals address.ContactId
                            into AddressGroup
                            from a in AddressGroup.DefaultIfEmpty()
                            select new {
                    Contact = contact,
                    Address = a,
                    Child   = c
                };
                // Filters
                if (!string.IsNullOrEmpty(contactParameters.Gender))
                {
                    query = query.Where(q => q.Contact.Gender == contactParameters.Gender);
                }

                // Group by contact
                var grouping = query.ToLookup(q => q.Contact.Id);
                Console.WriteLine("Items Count: {0}", grouping.Count);

                foreach (var item in grouping)
                {
                    var fullContact = new FullContact()
                    {
                        FirstName = item.First().Contact.FirstName,
                        LastName  = item.First().Contact.LastName,
                        Gender    = item.First().Contact.Gender,
                        ZipCode   = item.First().Address == null ? 0 : item.First().Address.ZipCode,
                        City      = item.First().Address?.City,
                        Children  = new List <Child> {
                        }
                    };

                    foreach (var i in item)
                    {
                        if (i.Child != null)
                        {
                            fullContact.Children.Add(
                                new Child()
                            {
                                Name = i.Child.Name
                            }
                                );
                        }
                    }

                    fullContacts.Add(fullContact);
                }
            }

            return(fullContacts);
        }
예제 #4
0
        public async Task MigrateDuplicateGroups_NoDuplicates_Success()
        {
            var container            = _fixture.Bootstrapper.TinyIoCContainer;
            var dbContext            = container.Resolve <IAuthorizationDbContext>();
            var groupMigratorService = container.Resolve <GroupMigratorService>();

            var customGroup1 = new Group
            {
                GroupId            = Guid.NewGuid(),
                Name               = $"Custom Group 1-{Guid.NewGuid()}",
                Source             = GroupConstants.CustomSource,
                CreatedBy          = "test",
                CreatedDateTimeUtc = DateTime.UtcNow
            };

            var customGroup2 = new Group
            {
                GroupId            = Guid.NewGuid(),
                Name               = $"Custom Group 2-{Guid.NewGuid()}",
                Source             = GroupConstants.CustomSource,
                CreatedBy          = "test",
                CreatedDateTimeUtc = DateTime.UtcNow
            };

            var group1 = new Group
            {
                GroupId            = Guid.NewGuid(),
                Name               = $"Group 1-{Guid.NewGuid()}",
                Source             = GroupConstants.DirectorySource,
                IdentityProvider   = IdentityConstants.ActiveDirectory,
                CreatedBy          = "test",
                CreatedDateTimeUtc = DateTime.UtcNow
            };

            var group2 = new Group
            {
                GroupId            = Guid.NewGuid(),
                Name               = $"Group 2-{Guid.NewGuid()}",
                Source             = GroupConstants.DirectorySource,
                IdentityProvider   = IdentityConstants.ActiveDirectory,
                CreatedBy          = "test",
                CreatedDateTimeUtc = DateTime.UtcNow
            };

            var childGroup1 = new ChildGroup
            {
                ChildGroupId       = group1.GroupId,
                ParentGroupId      = customGroup1.GroupId,
                CreatedBy          = "test",
                CreatedDateTimeUtc = DateTime.UtcNow
            };

            var childGroup2 = new ChildGroup
            {
                ChildGroupId       = group2.GroupId,
                ParentGroupId      = customGroup1.GroupId,
                CreatedBy          = "test",
                CreatedDateTimeUtc = DateTime.UtcNow
            };

            var childGroup3 = new ChildGroup
            {
                ChildGroupId       = group2.GroupId,
                ParentGroupId      = customGroup2.GroupId,
                CreatedBy          = "test",
                CreatedDateTimeUtc = DateTime.UtcNow
            };

            dbContext.Groups.AddRange(new List <Group>
            {
                customGroup1,
                customGroup2,
                group1,
                group2
            });

            dbContext.ChildGroups.AddRange(new List <ChildGroup>
            {
                childGroup1,
                childGroup2,
                childGroup3
            });

            dbContext.SaveChanges();

            var result = await groupMigratorService.MigrateDuplicateGroups();

            Assert.Empty(result.GroupMigrationRecords);

            var groupStore = container.Resolve <IGroupStore>();
            await groupStore.Delete(customGroup1.ToModel());

            await groupStore.Delete(customGroup2.ToModel());

            await groupStore.Delete(group1.ToModel());

            await groupStore.Delete(group2.ToModel());
        }
예제 #5
0
        public async Task MigrateDuplicateGroups_HasDuplicateIdentifiers_SuccessAsync()
        {
            var container            = _fixture.Bootstrapper.TinyIoCContainer;
            var dbContext            = container.Resolve <IAuthorizationDbContext>();
            var groupMigratorService = container.Resolve <GroupMigratorService>();

            #region Data Setup

            var client = new Client
            {
                ClientId = $"client1-{Guid.NewGuid()}",
                Name     = $"Client 1-{Guid.NewGuid()}"
            };

            var grain = new Grain
            {
                Name = $"dos-{Guid.NewGuid()}"
            };

            var securableItem = new SecurableItem
            {
                Name        = $"datamarts-{Guid.NewGuid()}",
                Grain       = grain,
                ClientOwner = client.ClientId
            };

            client.TopLevelSecurableItem = securableItem;

            var customGroup1 = new Group
            {
                GroupId            = Guid.NewGuid(),
                Name               = $"Custom Group 1-{Guid.NewGuid()}",
                Source             = GroupConstants.CustomSource,
                CreatedBy          = "test",
                CreatedDateTimeUtc = DateTime.UtcNow
            };

            var customGroup2 = new Group
            {
                GroupId            = Guid.NewGuid(),
                Name               = $"Custom Group 2-{Guid.NewGuid()}",
                Source             = GroupConstants.CustomSource,
                CreatedBy          = "test",
                CreatedDateTimeUtc = DateTime.UtcNow
            };

            var groupGuid = Guid.NewGuid();
            var group1    = new Group
            {
                GroupId            = Guid.NewGuid(),
                Name               = $"Group 1-{groupGuid}",
                IdentityProvider   = IdentityConstants.ActiveDirectory,
                TenantId           = "12345",
                Source             = GroupConstants.DirectorySource,
                CreatedBy          = "test",
                CreatedDateTimeUtc = DateTime.UtcNow
            };

            var group2 = new Group
            {
                GroupId            = Guid.NewGuid(),
                Name               = $"groUP 1-{groupGuid}",
                IdentityProvider   = IdentityConstants.ActiveDirectory,
                TenantId           = "12345",
                Source             = GroupConstants.DirectorySource,
                CreatedBy          = "test",
                CreatedDateTimeUtc = DateTime.UtcNow
            };

            var group3 = new Group
            {
                GroupId            = Guid.NewGuid(),
                Name               = $"groUP 1-{groupGuid}",
                IdentityProvider   = IdentityConstants.AzureActiveDirectory,
                TenantId           = "12345",
                Source             = GroupConstants.DirectorySource,
                CreatedBy          = "test",
                CreatedDateTimeUtc = DateTime.UtcNow
            };

            var role1 = new Role
            {
                RoleId        = Guid.NewGuid(),
                Name          = "Role 1",
                Grain         = grain.Name,
                SecurableItem = securableItem
            };

            var role2 = new Role
            {
                RoleId        = Guid.NewGuid(),
                Name          = "Role 2",
                Grain         = grain.Name,
                SecurableItem = securableItem,
            };

            var role3 = new Role
            {
                RoleId        = Guid.NewGuid(),
                Name          = "Role 3",
                Grain         = grain.Name,
                SecurableItem = securableItem,
            };

            var role4 = new Role
            {
                RoleId        = Guid.NewGuid(),
                Name          = "Role 4",
                Grain         = grain.Name,
                SecurableItem = securableItem,
            };

            var group1Role1 = new GroupRole
            {
                Group = group1,
                Role  = role1
            };

            var group2Role1 = new GroupRole
            {
                Group = group2,
                Role  = role1
            };

            var group2Role2 = new GroupRole
            {
                Group = group2,
                Role  = role2
            };

            var group2Role3 = new GroupRole
            {
                Group     = group2,
                Role      = role3,
                IsDeleted = true
            };

            var group3Role4 = new GroupRole
            {
                Group = group3,
                Role  = role4
            };

            var user1 = new User
            {
                IdentityProvider = IdentityConstants.ActiveDirectory,
                SubjectId        = Guid.NewGuid().ToString()
            };

            var customGroup1User1 = new GroupUser
            {
                Group = customGroup1,
                User  = user1
            };

            var customGroup2User1 = new GroupUser
            {
                Group = customGroup2,
                User  = user1
            };

            var childGroup1 = new ChildGroup
            {
                ChildGroupId       = group1.GroupId,
                ParentGroupId      = customGroup1.GroupId,
                CreatedBy          = "test",
                CreatedDateTimeUtc = DateTime.UtcNow
            };

            var childGroup2 = new ChildGroup
            {
                ChildGroupId       = group2.GroupId,
                ParentGroupId      = customGroup1.GroupId,
                CreatedBy          = "test",
                CreatedDateTimeUtc = DateTime.UtcNow
            };

            var childGroup3 = new ChildGroup
            {
                ChildGroupId       = group2.GroupId,
                ParentGroupId      = customGroup2.GroupId,
                CreatedBy          = "test",
                CreatedDateTimeUtc = DateTime.UtcNow
            };

            dbContext.Clients.Add(client);
            dbContext.Grains.Add(grain);
            dbContext.SecurableItems.Add(securableItem);

            dbContext.Roles.AddRange(new List <Role>
            {
                role1,
                role2,
                role3,
                role4
            });

            dbContext.Groups.AddRange(new List <Group>
            {
                customGroup1,
                customGroup2,
                group1,
                group2,
                group3
            });

            dbContext.GroupRoles.AddRange(new List <GroupRole>
            {
                group1Role1,
                group2Role1,
                group2Role2,
                group2Role3,
                group3Role4
            });

            dbContext.Users.Add(user1);

            dbContext.GroupUsers.AddRange(new List <GroupUser>
            {
                customGroup1User1,
                customGroup2User1
            });

            dbContext.ChildGroups.AddRange(new List <ChildGroup>
            {
                childGroup1,
                childGroup2,
                childGroup3
            });

            dbContext.SaveChanges();

            #endregion

            var results = await groupMigratorService.MigrateDuplicateGroups();

            Assert.Equal(1, results.GroupMigrationRecords.Count);
            Assert.Empty(results.GroupMigrationRecords.SelectMany(r => r.Errors));

            var principal = new ClaimsPrincipal(new ClaimsIdentity(new List <Claim>
            {
                new Claim(Claims.Scope, Scopes.ManageClientsScope),
                new Claim(Claims.Scope, Scopes.ReadScope),
                new Claim(Claims.Scope, Scopes.WriteScope),
                new Claim(Claims.ClientId, client.ClientId),
                new Claim(Claims.IdentityProvider, "idP1")
            }, "rolesprincipal"));

            var browser = _fixture.GetBrowser(principal, _storageProvider);

            var getResponse = await browser.Get(HttpUtility.UrlEncode($"/groups/Group 1-{groupGuid}"), with =>
            {
                with.HttpRequest();
                with.Header("Accept", "application/json");
                with.Query("identityProvider", IdentityConstants.ActiveDirectory);
                with.Query("tenantId", "12345");
            });

            var groupRoleApiModel = getResponse.Body.DeserializeJson <GroupRoleApiModel>();
            var roles             = groupRoleApiModel.Roles.ToList();
            Assert.Equal(2, roles.Count);
            Assert.Contains(roles, r => r.Name == role1.Name);
            Assert.Contains(roles, r => r.Name == role2.Name);

            var parents = groupRoleApiModel.Parents.ToList();
            Assert.Contains(parents, p => p.GroupName == customGroup1.Name);
            Assert.Contains(parents, p => p.GroupName == customGroup2.Name);

            var groupStore = container.Resolve <IGroupStore>();
            await groupStore.Delete(customGroup1.ToModel());

            await groupStore.Delete(customGroup2.ToModel());

            await groupStore.Delete(group1.ToModel());

            await groupStore.Delete(group2.ToModel());

            await groupStore.Delete(group3.ToModel());
        }
예제 #6
0
        public static ChildGroupRenderingList BuildContentGroups(GroupAdapter groupAdapter)
        {
            //Debug.Log("BuildContentGroups");
            ChildGroupRenderingList childGroupList = new ChildGroupRenderingList();

            var  groupDescriptors = DesignerReflection.GetChildGroupsReferences(groupAdapter);
            bool skipFirst        = false;

            if (groupDescriptors.Count > 0)
            {
                skipFirst = groupDescriptors[0].Attribute.ShowHeader;
            }

            foreach (ChildGroupDescriptor descriptor in groupDescriptors)
            {
                var attr = descriptor.Attribute;

                ChildGroup group;

                if (attr.ShowHeader)
                {
                    Texture iconTexture = null;

                    if (!string.IsNullOrEmpty(attr.Icon))
                    {
                        iconTexture = (Texture)Resources.Load(attr.Icon);
                    }

                    group = new ChildGroup(new GUIContent(attr.Label, iconTexture, attr.Tooltip));
                }
                else
                {
                    group = new ChildGroup();
                }

                List <ComponentAdapter> adapters = Core.Reflection.CoreReflector.GetMemberValue(descriptor.CollectionMemberInfo, groupAdapter) as List <ComponentAdapter>;

                // temp hack
                // ReSharper disable ConvertIfStatementToNullCoalescingExpression
                if (null == adapters)
                // ReSharper restore ConvertIfStatementToNullCoalescingExpression
                {
                    // ReSharper disable AssignNullToNotNullAttribute
                    adapters = new List <ComponentAdapter>(Core.Reflection.CoreReflector.GetMemberValue(descriptor.CollectionMemberInfo, groupAdapter) as ComponentAdapter[]);
                    // ReSharper restore AssignNullToNotNullAttribute
                }

                //Debug.Log("adapters.Count: " + adapters.Count);
                foreach (ComponentAdapter adapter in adapters)
                {
                    //Debug.Log("  -> adapter: " + adapter);
                    if (null != adapter)
                    {
                        var dataObject = new OrderDisplayRow(adapter.ToString(), adapter, new Rect(0, 0, 0, 0))
                        {
                            Color       = (adapter is GroupAdapter) ? Dark : Light,
                            IsContainer = adapter is GroupAdapter
                        };

                        if (skipFirst)
                        {
                            dataObject.YMin = OrderDisplay.ElementHeight;
                        }

                        //Debug.Log("Adding " + dataObject);
                        group.Add(dataObject);
                    }
                }

//                Debug.Log(string.Format(@"***** Group created:
//{0}
//
//", group));
                childGroupList.AddGroup(group);
            }

            //Debug.Log(childGroupList);

            return(childGroupList);
        }