public override ModelNode ReverseSingleHost(object reverseHost, ReverseOptions options)
        {
            var item = (reverseHost as SecurityRoleReverseHost).HostRole;

            var def = new SecurityRoleDefinition();

            def.Name = item.Name;
            def.Description = item.Description;

            var allPermissionNames = Enum.GetNames(typeof(PermissionKind));

            foreach (var permissionName in allPermissionNames)
            {
                var permissionValue = (PermissionKind)Enum.Parse(typeof(PermissionKind), permissionName, true);

                if (item.BasePermissions.Has(permissionValue))
                {
                    if (permissionValue != PermissionKind.EmptyMask)
                        def.BasePermissions.Add(permissionName);
                }
            }

            return new SecurityRoleModelNode
            {
                Options = { RequireSelfProcessing = true },
                Value = def
            };
        }
        public static ModelNode AddSecurityRoleLink(this ModelNode model, SecurityRoleDefinition definition, Action<ModelNode> action)
        {
            var roleLinkDefinition = new SecurityRoleLinkDefinition
            {
                SecurityRoleName = definition.Name
            };

            return model.AddSecurityRoleLink(roleLinkDefinition, action);
        }
 public static ModelNode AddSecurityRole(this ModelNode model, SecurityRoleDefinition definition, Action<ModelNode> action)
 {
     return model.AddDefinitionNode(definition, action);
 }
 public static ModelNode AddSecurityRole(this ModelNode model, SecurityRoleDefinition definition)
 {
     return AddSecurityRole(model, definition, null);
 }
        public void Deploy_SecurityRoles()
        {
            // Step 1, define security groups
            var customerSupport = new SecurityRoleDefinition
            {
                Name = "Customer support role",
                Description = "Customer support team."
            };

            var customerReviewers = new SecurityRoleDefinition
            {
                Name = "Customer reviewers role",
                Description = "Customer reviewers team."
            };

            // Step 2, define web model and artifact relationships - add security groups t the web 
            var model = SPMeta2Model
                             .NewSiteModel(site =>
                             {
                                 site
                                   .AddSecurityRole(customerSupport)
                                   .AddSecurityRole(customerReviewers);
                             });

            // Step 3, deploy model
            DeploySiteModel(model);
        }