Как получить все папки в SPList, затем проверить разрешение «Внести вклад» для текущего пользователя - PullRequest
6 голосов
/ 11 августа 2011

У меня есть список общих ресурсов:

List
---------Folder 1
-----------------Item 1
-----------------Item 2
---------Folder 2
-----------------Item 1
-----------------Item 2
---------Folder 3
-----------------Item 1
-----------------Item 2
  1. Как мне получить все папки в List?

  2. Послечто проверка, имеет ли текущий пользователь разрешение Contribute на Folder 1, Folder 2, Folder 3?

Ответы [ 3 ]

3 голосов
/ 11 августа 2011

Чтобы получить список папок списка, вы можете использовать свойство 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 для определения роли участника:

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 голос
/ 03 октября 2012
private IEnumerable<SPFolder> GetListFolders(SPList list)
{
    return list.Folders.OfType<SPListItem>().Select(item => item.Folder);
}
0 голосов
/ 06 марта 2015

Проверка прав пользователей путем проверки их принадлежности к определению ролей немного рискованна. Кто скажет, что определение роли не будет переименовано или базовые разрешения, включенные в определение роли, не будут изменены.

Если цель в первую очередь состоит в том, чтобы проверить разрешения текущего пользователя для защищаемого объекта, то я думаю, что лучший способ - просто вызвать один из перегруженных методов DoesUserHavePermissions объекта SPSecurableObject (SPListItem, SPList, SPWeb или SPSite) с желаемым разрешением. маска.

...