// Imports the security information from the files.
        // excludeMetadataPermission indicates if model privileges for Metadata are exluded.
        private static void ImportSecurityInformation(bool excludeMetadataPermission, string fileName)
        {
            // Deserialization.
            System.Collections.ObjectModel.Collection<User> users;
            System.Collections.ObjectModel.Collection<Group> groups;
            SecurityInformation securityInformation = new SecurityInformation();

            XmlSerializer serializer = new XmlSerializer(typeof(SecurityInformation));

            using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
            {
                XmlDictionaryReader xmlReader = XmlDictionaryReader.CreateBinaryReader(fs, XmlDictionaryReaderQuotas.Max);

                // Derializes the security information.
                securityInformation = (SecurityInformation)serializer.Deserialize(xmlReader);
            }

            // Gets users and groups objects from securityInformation.
            users = securityInformation.Users;
            groups = securityInformation.Groups;

            // Exclude model privileges for Metadata when excludeMetadataPermission is true.
            if (excludeMetadataPermission)
            {
                foreach (User anUser in users)
                {
                    System.Collections.ObjectModel.Collection<ModelPrivilege> tempModelPrivileges = new System.Collections.ObjectModel.Collection<ModelPrivilege> { };

                    // Exclude model privileges for Metadata (internal id = 1).
                    foreach (ModelPrivilege aPrivilege in anUser.SecurityPrivilege.ModelPrivileges)
                    {
                        if (aPrivilege.ModelId.InternalId != 1)
                        {
                            tempModelPrivileges.Add(aPrivilege);
                        }
                    }

                    anUser.SecurityPrivilege.ModelPrivileges = tempModelPrivileges;
                }
            }

            // Exclude model privileges for Metadata when excludeMetadataPermission is true.
            if (excludeMetadataPermission)
            {
                foreach (Group aGroup in groups)
                {
                    System.Collections.ObjectModel.Collection<ModelPrivilege> tempModelPrivileges = new System.Collections.ObjectModel.Collection<ModelPrivilege> { };

                    // Exclude model privileges for Metadata (internal id = 1).
                    foreach (ModelPrivilege aPrivilege in aGroup.SecurityPrivilege.ModelPrivileges)
                    {
                        if (aPrivilege.ModelId.InternalId != 1)
                        {
                            tempModelPrivileges.Add(aPrivilege);
                        }
                    }

                    aGroup.SecurityPrivilege.ModelPrivileges = tempModelPrivileges;
                }
            }

            // Clones security principals for groups and users.
            SecurityPrincipalsRequest principalRequest = new SecurityPrincipalsRequest();
            principalRequest.Principals = new SecurityPrincipals();
            principalRequest.Principals.Groups = new System.Collections.ObjectModel.Collection<Group> { };
            principalRequest.Principals.Users = new System.Collections.ObjectModel.Collection<User> { };

            // Sets group objects.
            foreach (Group aGroup in groups)
            {
                principalRequest.Principals.Groups.Add(aGroup);
            }

            // Creates groups and their security principals.
            // Create groups before users since some of the users may belong to one of the groups and reference the group object.
            // Note that the security information assumes that GUIDs for objects such as Models are the same.
            MessageResponse response = clientProxy.SecurityPrincipalsClone(principalRequest);
            HandleOperationErrors(response.OperationResult);

            principalRequest.Principals.Groups = new System.Collections.ObjectModel.Collection<Group> { };
            principalRequest.Principals.Users = new System.Collections.ObjectModel.Collection<User> { };

            // Sets user objects.
            foreach (User aUser in users)
            {
                principalRequest.Principals.Users.Add(aUser);
            }

            // Creates users and their security principals.
            response = clientProxy.SecurityPrincipalsClone(principalRequest);
            HandleOperationErrors(response.OperationResult);
        }
Exemple #2
0
        // Imports the security information from the files.
        // excludeMetadataPermission indicates if model privileges for Metadata are exluded.
        private static void ImportSecurityInformation(bool excludeMetadataPermission, string fileName)
        {
            // Deserialization.
            System.Collections.ObjectModel.Collection <User>  users;
            System.Collections.ObjectModel.Collection <Group> groups;
            SecurityInformation securityInformation = new SecurityInformation();

            XmlSerializer serializer = new XmlSerializer(typeof(SecurityInformation));

            using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
            {
                XmlDictionaryReader xmlReader = XmlDictionaryReader.CreateBinaryReader(fs, XmlDictionaryReaderQuotas.Max);

                // Derializes the security information.
                securityInformation = (SecurityInformation)serializer.Deserialize(xmlReader);
            }

            // Gets users and groups objects from securityInformation.
            users  = securityInformation.Users;
            groups = securityInformation.Groups;

            // Exclude model privileges for Metadata when excludeMetadataPermission is true.
            if (excludeMetadataPermission)
            {
                foreach (User anUser in users)
                {
                    System.Collections.ObjectModel.Collection <ModelPrivilege> tempModelPrivileges = new System.Collections.ObjectModel.Collection <ModelPrivilege> {
                    };

                    // Exclude model privileges for Metadata (internal id = 1).
                    foreach (ModelPrivilege aPrivilege in anUser.SecurityPrivilege.ModelPrivileges)
                    {
                        if (aPrivilege.ModelId.InternalId != 1)
                        {
                            tempModelPrivileges.Add(aPrivilege);
                        }
                    }

                    anUser.SecurityPrivilege.ModelPrivileges = tempModelPrivileges;
                }
            }

            // Exclude model privileges for Metadata when excludeMetadataPermission is true.
            if (excludeMetadataPermission)
            {
                foreach (Group aGroup in groups)
                {
                    System.Collections.ObjectModel.Collection <ModelPrivilege> tempModelPrivileges = new System.Collections.ObjectModel.Collection <ModelPrivilege> {
                    };

                    // Exclude model privileges for Metadata (internal id = 1).
                    foreach (ModelPrivilege aPrivilege in aGroup.SecurityPrivilege.ModelPrivileges)
                    {
                        if (aPrivilege.ModelId.InternalId != 1)
                        {
                            tempModelPrivileges.Add(aPrivilege);
                        }
                    }

                    aGroup.SecurityPrivilege.ModelPrivileges = tempModelPrivileges;
                }
            }

            // Clones security principals for groups and users.
            SecurityPrincipalsRequest principalRequest = new SecurityPrincipalsRequest();

            principalRequest.Principals        = new SecurityPrincipals();
            principalRequest.Principals.Groups = new System.Collections.ObjectModel.Collection <Group> {
            };
            principalRequest.Principals.Users  = new System.Collections.ObjectModel.Collection <User> {
            };

            // Sets group objects.
            foreach (Group aGroup in groups)
            {
                principalRequest.Principals.Groups.Add(aGroup);
            }

            // Creates groups and their security principals.
            // Create groups before users since some of the users may belong to one of the groups and reference the group object.
            // Note that the security information assumes that GUIDs for objects such as Models are the same.
            MessageResponse response = clientProxy.SecurityPrincipalsClone(principalRequest);

            HandleOperationErrors(response.OperationResult);

            principalRequest.Principals.Groups = new System.Collections.ObjectModel.Collection <Group> {
            };
            principalRequest.Principals.Users  = new System.Collections.ObjectModel.Collection <User> {
            };

            // Sets user objects.
            foreach (User aUser in users)
            {
                principalRequest.Principals.Users.Add(aUser);
            }

            // Creates users and their security principals.
            response = clientProxy.SecurityPrincipalsClone(principalRequest);
            HandleOperationErrors(response.OperationResult);
        }