6

私はそのようなSharePointリストを持っています:

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 に答える