如何获取SPList中的所有文件夹,然后检查当前用户的"Contribute"权限

Dươ*_*ỳnh 6 sharepoint caml spquery

我有一个像这样的sharepoint列表:

List
---------Folder 1
-----------------Item 1
-----------------Item 2
---------Folder 2
-----------------Item 1
-----------------Item 2
---------Folder 3
-----------------Item 1
-----------------Item 2
Run Code Online (Sandbox Code Playgroud)
  1. 如何获取所有文件夹List

  2. 如果当前用户有检查后Contribute的权限Folder 1,Folder 2,Folder 3

Ped*_*nto 3

要获取列表的文件夹列表,您可以使用对象Folders的属性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
}
Run Code Online (Sandbox Code Playgroud)

要检查给定用户是否对文件夹具有贡献权限,您需要获取与给定用户的检查SPListItem关联的权限,并检查其贡献角色定义:SPFolder,RoleAssignmentRoleDefinitionBindings

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;
}
Run Code Online (Sandbox Code Playgroud)

使用示例

//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
}
Run Code Online (Sandbox Code Playgroud)

  • 我不明白这对你有什么用。您无法将“SPListItemCollection”转换为“SPFolderCollection”,或将“SPListItem”转换为“SPFolder”,编译器不会拥有它。 (6认同)