c# - How to create an event receiver change permisions on file added sharepoint 2013 -
i have library ("documents") want add event receiver remove permisions on item added. tryed multiple ways i'm not experimented , can't figure i'm wrong. following code managed breakinheritance, didn't managed remove assignmets , add 1 new.
public override void itemadded(spitemeventproperties properties) { base.itemadded(properties); if (properties.listtitle.equals("documents")) need on one.{ 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); }
first of all, need instantiate new spsite , spweb objects inside spsecurity.runwithelevatedprivileges (link).
second, if want remove rights, should call splistitem.breakroleinheritance false argument. in case, item have no rights. , can add whatever rights need.
and personal advice - should never use empty catch-block. send error message ups logging service, it's easy helpful.
Comments
Post a Comment