To get a list of list folders, you can use the Folders property of the SPList object:
private SPFolderCollection GetListFolders(SPList list) { return list.Folders;
To check if a given user has Contribute permissions in a folder, you should get the SPListItem associated with the SPFolder, tag for the RoleAssignment this user and check his RoleDefinitionBindings to determine the role of the Contribute
private bool HasContributePermissionOnFolder(SPFolder folder, SPPrincipal user) { var contributePermission = folder.ParentWeb.RoleDefinitions["Contribute"]; var roleAssignementsOfUser = folder.Item.RoleAssignments.Cast<SPRoleAssignment>() .Where(ra => ra.Member == user); var hasContributePermission = roleAssignementsOfUser .Where(ra => ra.RoleDefinitionBindings.Contains(contributePermission)).Count() > 0; return hasContributePermission; }
Usage example
//remember to add using System.Linq; for the above code to work //SPList list = <your list>; //SPWeb web = <your web>; var folders = GetAllFoldersOfList(list); foreach (SPFolder folder in folders) { if (HasContributePermissionOnFolder(folder, spWeb.CurrentUser)) { // do stuff }
source share