2011-08-11 12 views
6

tengo una lista de SharePoint como esa:Como ir todas las carpetas en un SPList, a continuación, comprobar el permiso "Contribuir" para el usuario actual

List 
---------Folder 1 
-----------------Item 1 
-----------------Item 2 
---------Folder 2 
-----------------Item 1 
-----------------Item 2 
---------Folder 3 
-----------------Item 1 
-----------------Item 2 
  1. ¿Cómo puedo obtener todas las carpetas en List?

  2. Después de que la comprobación de si el usuario actual tiene permiso Contribute en Folder 1, Folder 2, Folder 3?

Respuesta

3

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 
} 
+6

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

+0

SPList.Folders devuelve un SPListItemCollection –

1
private IEnumerable<SPFolder> GetListFolders(SPList list) 
{ 
    return list.Folders.OfType<SPListItem>().Select(item => item.Folder); 
} 
+0

Esto me ayudó a obtener una subcarpeta en una biblioteca de documentos. – OmegaMan

0

Comprobación de permisos de usuario mediante la comprobación de su pertenencia a las definiciones de funciones es un poco arriesgado. ¿Quién puede decir que la definición de rol no cambiará de nombre o que los permisos base incluidos en la definición de rol no se habrán modificado?

Si el objetivo es principalmente para comprobar los permisos del usuario actual en un objeto asegurable entonces creo que una mejor manera es simplemente llamar a uno de los métodos DoesUserHavePermissions sobrecargadas del SPSecurableObject (SPListItem, SPList, SPWeb o SPSite) con el deseado máscara de permiso.

Cuestiones relacionadas