6

我有一个这样的共享点列表:

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

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

4

3 回答 3

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
}

要检查给定用户是否对文件夹具有贡献权限,您需要获取与给定用户的检查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;
}

使用示例

//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
}
于 2011-08-11T10:42:50.173 回答
2
private IEnumerable<SPFolder> GetListFolders(SPList list)
{
    return list.Folders.OfType<SPListItem>().Select(item => item.Folder);
}
于 2012-10-03T12:24:12.677 回答
0

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

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

于 2015-03-06T01:30:01.710 回答