Запрашивать элементы списка в зависимости от того, какие разрешения у них есть - PullRequest
1 голос
/ 16 марта 2010

Не знаю, как Google для таких, но есть ли способ запросить все элементы, где

  • Разрешения уникальны для listitem
  • Эти уникальные разрешения содержат назначение для конкретной группы X.

Ответы [ 3 ]

3 голосов
/ 02 августа 2018

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

Совместное использование / установка уникальных разрешений для элемента списка добавляет скрытые«Полевые» узлы («SharedWithDetails» и «SharedWithUsers») для его свойства SchemaXml, которое можно фильтровать с помощью CAML:

<View><Query><Where><IsNotNull><FieldRef Name='SharedWithDetails' /></IsNotNull></Where></Query></View>

Кстати, установка уникального разрешения для элемента также, кажется, добавляет флаг ксам список, что, по-видимому, позволяет странице /_layouts/15/uniqperm.aspx так быстро возвращать ответы на biiiig сайтах (и загадочно расплывчатое сообщение «Списки, которые могут содержать элементы с уникальными разрешениями»).Этот дополнительный XML-код используется для идентификации списков, которые (возможно) содержат элементы с уникальными разрешениями, что на значительно более эффективно, чем перечисление каждого элемента в списке, чтобы выяснить , если любой из них имелуникальные разрешения.Это особенно ценно, если ваш сайт содержит много списков или большие списки.

Этот код PnP PowerShell возвращает все списки, которые (возможно) имеют элементы с уникальными разрешениями:

Get-PnPList -Includes SchemaXml | ? {$_.SchemaXML -match "SharedWithDetails"}

И один разу вас есть список, вы можете использовать Get-PnPListItem и вышеуказанный CAML-запрос, чтобы эффективно возвращать только элементы с уникальными разрешениями без необходимости перечислять / загружать каждый элемент в списке:

Get-PnPListItem -List [YourList] -Query "<View><Query><Where><IsNotNull><FieldRef Name='SharedWithDetails' /></IsNotNull></Where></Query></View>"
2 голосов
/ 18 марта 2010

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

Другое решение использует учетные данные пользователя, который является только членом группы x. SharePoint автоматически учитывает разрешения. Поэтому, если вы подключаетесь к списку с использованием этого пользователя, вы должны получать только элементы, на которые у пользователя есть разрешения. Для этого используйте класс NetworkCredentials.

Затем используйте запрос CAML для обновления ваших товаров.

- W

0 голосов
/ 17 марта 2010

Не думаю, что вы можете сделать это, сформировав запрос CAML и используя объект SPQuery для получения элементов таким способом.

Я бы хотел получить все элементы и просмотреть их для проверки свойств HasUniqueRoleAssignments и RoleAssignments.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...