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



我有一个这样的sharepoint列表:

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

  2. 检查当前用户对Folder 1, Folder 2, Folder 3是否有Contribute权限

要获取列表的文件夹列表,您可以使用SPList对象的Folders属性:

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
}

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

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
}
private IEnumerable<SPFolder> GetListFolders(SPList list)
{
    return list.Folders.OfType<SPListItem>().Select(item => item.Folder);
}

通过检查角色定义的成员关系来检查用户权限有点冒险。谁说角色定义不会被重命名,或者角色定义中包含的基本权限不会被修改。

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

相关内容

  • 没有找到相关文章

最新更新