Para obtener la lista de carpetas de una lista se puede utilizar la propiedad Folders
del objeto SPList
:
private SPFolderCollection GetListFolders(SPList list) {
return list.Folders;
// you can also do:
// return list.Folders.Cast<SPFolder>().ToList();
// to return a List<SPFolder> instead of a SPFolderCollection
}
Para comprobar si un determinado usuario tiene Contribuir permisos en una carpeta que necesita para obtener la SPListItem
asociado con el cheque SPFolder,
para un RoleAssignment
del usuario dado y comprobar su RoleDefinitionBindings
Contribuir para la Definición de función:
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;
}
Ejemplo de uso
//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
}
No entiendo cómo esto podría funcionar para usted. No puede convertir 'SPListItemCollection' en' SPFolderCollection', o 'SPListItem' en' SPFolder', el compilador no lo tendrá. – Amicable
SPList.Folders devuelve un SPListItemCollection –