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

时间:2011-08-11 09:31:48

标签: sharepoint caml spquery

我有一个像这样的分享名单:

List
---------Folder 1
-----------------Item 1
-----------------Item 2
---------Folder 2
-----------------Item 1
-----------------Item 2
---------Folder 3
-----------------Item 1
-----------------Item 2
  1. 如何在List中获取所有文件夹?

  2. 之后检查当前用户对ContributeFolder 1Folder 2 {/ 1>}是否有Folder 3的权限?

3 个答案:

答案 0 :(得分: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
}

要检查给定用户是否对文件夹具有Contribute权限,您需要获取与SPListItem相关联的SPFolder,检查给定用户的RoleAssignment并检查其RoleDefinitionBindings 1}}用于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;
}

使用示例

//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
}

答案 1 :(得分:1)

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

答案 2 :(得分:0)

通过检查用户角色定义的成员资格来检查用户权限有点冒险。谁可以说不会重命名角色定义,也不会修改角色定义中包含的基本权限。

如果目标主要是检查当前用户对安全对象的权限,那么我认为更好的方法就是使用所需的权限调用SPSecurableObject(SPListItem,SPList,SPWeb或SPSite)的重载的DoesUserHavePermissions方法之一掩模。