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