16 October, 2008

Crear eventHandler en una DocLib y cambiar permisos al SPListItem

Creo que es muy interesante conocer cómo assignar permisos a un item cuando se añade a una lista, por ejemplo. Puede ser una práctica muy usual. Por ello, os pongo el código de como se realizaría:

public override void ItemUpdated(SPItemEventProperties properties)
{
string sGroupName = "Group Name";
spWeb = properties.OpenWeb();
spWeb.AllowUnsafeUpdates = true;
SPGroupCollection spGroupCollection = spWeb.SiteGroups;
SPRoleDefinition spRoleDefinition = spWeb.RoleDefinitions.GetByType(SPRoleType.Reader);
properties.ListItem.BreakRoleInheritance(true);


foreach (SPRoleAssignment spRoleAssignment in properties.ListItem.RoleAssignments)
{
//Add your conditions to remove/not remove the existing permissions
spRoleAssignment.RoleDefinitionBindings.RemoveAll();
spRoleAssignment.Update();
}

if (spGroupCollection != null)
{
SPRoleAssignment spRoleAssignment = new SPRoleAssignment((SPPrincipal)spGroupCollection[sGroupName]);
spRoleAssignment.RoleDefinitionBindings.Add(spRoleDefinition);
properties.ListItem.RoleAssignments.Add(spRoleAssignment);
}

this.DisableEventFiring();
UpdateUserGroups(spWeb, properties);
this.EnableEventFiring();
spWeb.AllowUnsafeUpdates = false;
spWeb.Dispose();
}