How to Programmatically Set Permissions on Files/Folders in a SharePoint Document Library


Yep, had to figure this out since I’m still working with SharePoint stuff.  I couldn’t find any “HowTo’s,” code samples, tricks, hints, or anything else really helpful on this.  Just a bunch of other folks attemptint to do the same thing.


 This is one of those things where the answer looks simple and seems like it should have been apparent from the start.  Alas I couldn’t see it in the beginning either.


 Here’s the magic code:



// get a reference to the folder (this assumes path points to a valid folder)


SPFolder folder = SharePointConfiguration.Site.GetFolder(path);


 


// get a reference to the Sharepoint group collection


SPGroupCollection spc = SharePointConfiguration.Site.SiteGroups;


 


// get a reference to the group who’s permissions you want to modify for the folder above


SPGroup group = spc[groupName];


 


// create a role assignment from the group reference


SPRoleAssignment roleAssignment = new SPRoleAssignment((SPPrincipal)group);


 


// break role inheritance for folders/files because they will be having permissions separate from their parent file/folder


folder.Item.BreakRoleInheritance(true);


 


// update the role assignments for the group by adding the permissionSet “TestPermissionLevel” which is a custom


// permissionset I created manually…you can easily use any of the built-in permission sets


roleAssignment.RoleDefinitionBindings.Add(SharePointConfiguration.Site.RoleDefinitions[“Test Permission Level”]);


 


// apply the new roleassignment to the folder.  You can do this at the listitem level if desired (i.e. this could be SPfile.Item…. instead of SPFolder.Item)


folder.Item.RoleAssignments.Add(roleAssignment);