Ejemplo n.º 1
0
        public override void WithResolvingModelHost(object modelHost, DefinitionBase model, Type childModelType, Action <object> action)
        {
            var securableObject = ExtractSecurableObject(modelHost);

            if (securableObject is SecurableObject)
            {
                var securityGroupLinkModel = model as SecurityGroupLinkDefinition;
                if (securityGroupLinkModel == null)
                {
                    throw new ArgumentException("model has to be SecurityGroupDefinition");
                }

                var web = GetWebFromSPSecurableObject(securableObject as SecurableObject);

                var context = web.Context;

                context.Load(web, w => w.SiteGroups);
                context.ExecuteQueryWithTrace();

                Group securityGroup = ResolveSecurityGroup(securityGroupLinkModel, web, context);

                var newModelHost = new SecurityGroupModelHost
                {
                    SecurableObject = securableObject,
                    SecurityGroup   = securityGroup
                };

                action(newModelHost);
            }
            else
            {
                action(modelHost);
            }
        }
Ejemplo n.º 2
0
        public override void WithResolvingModelHost(object modelHost, DefinitionBase model, Type childModelType, Action <object> action)
        {
            if (modelHost is SPSecurableObject)
            {
                var securityGroupLinkModel = model as SecurityGroupLinkDefinition;
                if (securityGroupLinkModel == null)
                {
                    throw new ArgumentException("model has to be SecurityGroupDefinition");
                }

                var web           = ExtractWeb(modelHost);
                var securityGroup = web.SiteGroups[securityGroupLinkModel.SecurityGroupName];

                var newModelHost = new SecurityGroupModelHost
                {
                    SecurableObject = modelHost as SPSecurableObject,
                    SecurityGroup   = securityGroup
                };

                action(newModelHost);
            }
            else
            {
                action(modelHost);
            }
        }
Ejemplo n.º 3
0
        public override void WithResolvingModelHost(ModelHostResolveContext modelHostContext)
        {
            var modelHost      = modelHostContext.ModelHost;
            var model          = modelHostContext.Model;
            var childModelType = modelHostContext.ChildModelType;
            var action         = modelHostContext.Action;


            var securableObject = ExtractSecurableObject(modelHost);

            if (securableObject is SPSecurableObject)
            {
                var securityGroupLinkModel = model as SecurityGroupLinkDefinition;
                if (securityGroupLinkModel == null)
                {
                    throw new ArgumentException("model has to be SecurityGroupDefinition");
                }

                var web           = ExtractWeb(modelHost);
                var securityGroup = ResolveSecurityGroup(web, securityGroupLinkModel);

                var newModelHost = new SecurityGroupModelHost
                {
                    SecurableObject = securableObject as SPSecurableObject,
                    SecurityGroup   = securityGroup
                };

                action(newModelHost);
            }
            else
            {
                action(modelHost);
            }
        }
Ejemplo n.º 4
0
        private void DeploySiteGroupUnderSiteGroup(object modelHost, SecurityGroupModelHost securityGroupModelHost, DefinitionBase model)
        {
            var securityGroupModel = model.WithAssertAndCast <SecurityGroupDefinition>("model",
                                                                                       value => value.RequireNotNull());

            var context = securityGroupModelHost.HostClientContext;

            var currentGroup = securityGroupModelHost.SecurityGroup;
            var subGroup     = securityGroupModelHost.HostWeb.EnsureUser(securityGroupModel.Name);

            context.Load(subGroup);
            context.Load(currentGroup, g => g.Users);

            context.ExecuteQueryWithTrace();

            var existingGroup = currentGroup.Users.FirstOrDefault(u => u.Id == subGroup.Id);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = currentGroup,
                ObjectType       = typeof(Principal),
                ObjectDefinition = securityGroupModel,
                ModelHost        = modelHost
            });

            if (existingGroup == null)
            {
                existingGroup = currentGroup.Users.Add(new UserCreationInformation
                {
                    Title     = subGroup.Title,
                    LoginName = subGroup.LoginName,
                    Email     = subGroup.Email
                });
            }

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioned,
                Object           = currentGroup,
                ObjectType       = typeof(Principal),
                ObjectDefinition = securityGroupModel,
                ModelHost        = modelHost
            });

            if (existingGroup == null)
            {
                currentGroup.Update();
                context.ExecuteQueryWithTrace();
            }
        }
Ejemplo n.º 5
0
        private void DeployArtifact(SecurityGroupModelHost typedModelHost, SPGroup spGroup, UserDefinition definition)
        {
            var shouldUpdate = false;
            var existingUser = GetUserInGroup(spGroup.ParentWeb, spGroup, definition);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = existingUser,
                ObjectType       = typeof(SPUser),
                ObjectDefinition = definition,
                ModelHost        = typedModelHost
            });

            if (existingUser == null)
            {
                var    web        = spGroup.ParentWeb;
                SPUser targetUser = null;

                if (!string.IsNullOrEmpty(definition.LoginName))
                {
                    targetUser = web.EnsureUser(definition.LoginName);
                }
                else if (!string.IsNullOrEmpty(definition.Email))
                {
                    targetUser = web.EnsureUser(definition.Email);
                }

                spGroup.Users.Add(targetUser.LoginName, targetUser.Email, targetUser.LoginName, targetUser.Notes);
                shouldUpdate = true;

                existingUser = targetUser;
            }

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioned,
                Object           = existingUser,
                ObjectType       = typeof(SPUser),
                ObjectDefinition = definition,
                ModelHost        = typedModelHost
            });

            if (shouldUpdate)
            {
                spGroup.Update();
            }
        }
Ejemplo n.º 6
0
        private void DeploySiteGroupUnderSiteGroup(object modelHost, SecurityGroupModelHost securityGroupModelHost, DefinitionBase model)
        {
            var securityGroupModel = model.WithAssertAndCast <SecurityGroupDefinition>("model",
                                                                                       value => value.RequireNotNull());

            var currentGroup = securityGroupModelHost.SecurityGroup;
            var subGroup     = securityGroupModelHost.SecurityGroup.ParentWeb.EnsureUser(securityGroupModel.Name);

            var existingGroup = currentGroup.Users.OfType <SPPrincipal>()
                                .FirstOrDefault(u => u.ID == subGroup.ID);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = currentGroup,
                ObjectType       = typeof(SPPrincipal),
                ObjectDefinition = securityGroupModel,
                ModelHost        = modelHost
            });

            if (existingGroup == null)
            {
                currentGroup.Users.Add(subGroup.LoginName, subGroup.Email, subGroup.Name, subGroup.Notes);
            }

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioned,
                Object           = currentGroup,
                ObjectType       = typeof(SPPrincipal),
                ObjectDefinition = securityGroupModel,
                ModelHost        = modelHost
            });

            if (existingGroup == null)
            {
                currentGroup.Update();
            }
        }
Ejemplo n.º 7
0
        public override void WithResolvingModelHost(ModelHostResolveContext modelHostContext)
        {
            var modelHost      = modelHostContext.ModelHost;
            var model          = modelHostContext.Model;
            var childModelType = modelHostContext.ChildModelType;
            var action         = modelHostContext.Action;


            var web = ExtractWeb(modelHost);

            if (web != null)
            {
                string securityGroupName;

                if (model is SecurityGroupLinkDefinition)
                {
                    securityGroupName = (model as SecurityGroupLinkDefinition).SecurityGroupName;
                }
                else if (model is SecurityGroupDefinition)
                {
                    securityGroupName = (model as SecurityGroupDefinition).Name;
                }
                else
                {
                    throw new ArgumentException("model has to be SecurityGroupDefinition or SecurityGroupLinkDefinition");
                }

                var securityGroup = web.SiteGroups[securityGroupName];

                var newModelHost = new SecurityGroupModelHost
                {
                    SecurityGroup   = securityGroup,
                    SecurableObject = modelHost as SPSecurableObject
                };

                action(newModelHost);
            }
            else
            {
                action(modelHost);
            }
        }
Ejemplo n.º 8
0
        private void DeployArtifact(SecurityGroupModelHost typedModelHost, Group spGroup, UserDefinition definition)
        {
            var web     = typedModelHost.HostWeb;
            var context = spGroup.Context;

            var shouldUpdate = false;
            var existingUser = GetUserInGroup(web, spGroup, definition);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = existingUser,
                ObjectType       = typeof(User),
                ObjectDefinition = definition,
                ModelHost        = typedModelHost
            });

            if (existingUser == null)
            {
                User targetUser = null;

                if (!string.IsNullOrEmpty(definition.LoginName))
                {
                    targetUser = web.EnsureUser(definition.LoginName);
                }
                else if (!string.IsNullOrEmpty(definition.Email))
                {
                    targetUser = web.EnsureUser(definition.Email);
                }

                context.Load(targetUser, u => u.Email,
                             u => u.LoginName,
                             u => u.Title);

                context.ExecuteQueryWithTrace();

                spGroup.Users.Add(new UserCreationInformation
                {
                    Email     = targetUser.Email,
                    LoginName = targetUser.LoginName,
                    Title     = targetUser.Title
                });

                shouldUpdate = true;
                existingUser = targetUser;
            }

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioned,
                Object           = existingUser,
                ObjectType       = typeof(User),
                ObjectDefinition = definition,
                ModelHost        = typedModelHost
            });

            if (shouldUpdate)
            {
                spGroup.Update();
                context.ExecuteQueryWithTrace();
            }
        }