Wednesday, 28 August 2013

How to create an event receiver change permisions on file added sharepoint 2013

How to create an event receiver change permisions on file added sharepoint
2013

Hey I have a library("Documents") where I want to add an event receiver
which will remove permisions on item added. I tryed already multiple ways
to do this but i'm not so experimented and I can't figure where i'm wrong.
With following code I managed to BreakInheritance, but didn't managed to
remove all assignmets and add one new. I really need help on this one.
public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
if (properties.ListTitle.Equals("Documents"))
{
using (SPSite site = new SPSite(properties.WebUrl))
{
site.AllowUnsafeUpdates = true;
using (SPWeb web = site.OpenWeb())
{
SPUser user = web.CurrentUser;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
try
{
web.AllowUnsafeUpdates = true;
SPListItem li = properties.ListItem;
SPFile lf = web.GetFile(li.Url);
SPRoleType read = SPRoleType.Guest;
lf.Item.BreakRoleInheritance(true);
while (lf.Item.RoleAssignments.Count > 0)
{
lf.Item.RoleAssignments.Remove(0);
}
AssignPermissionsToItem(lf.Item, user, read);
web.AllowUnsafeUpdates = false;
}
catch (Exception ex)
{
}
});
}
}
}
}
public static void AssignPermissionsToItem(SPListItem item,
SPPrincipal obj, SPRoleType roleType)
{
if (!item.HasUniqueRoleAssignments)
{
item.BreakRoleInheritance(true);
}
SPRoleAssignment roleAssignment = new SPRoleAssignment(obj);
SPRoleDefinition roleDefinition =
item.Web.RoleDefinitions.GetByType(roleType);
roleAssignment.RoleDefinitionBindings.Add(roleDefinition);
item.RoleAssignments.Add(roleAssignment);
}

No comments:

Post a Comment