根据他们拥有的权限查询列表项

Jan*_*rgs 2 permissions sharepoint sharepoint-2007

不知道如何用谷歌搜索这样的东西,但有没有办法查询所有项目

  • 权限是 listitem 独有的
  • 这些独特的权限包含对特定组 X 的分配。

小智 7

旧帖子,但仍然有很多观点,我找不到任何更相关的地方来说明这一点。现在有一些快捷方式可用,您可以使用 CAML 仅返回具有唯一权限的项目,而不是使用 HasUniqueRoleAssignments 属性。

在列表项上共享/设置唯一权限会将隐藏的“字段”节点(“SharedWithDetails”和“SharedWithUsers”)添加到其 SchemaXml 属性,您可以使用 CAML 对其进行过滤:

<View><Query><Where><IsNotNull><FieldRef Name='SharedWithDetails' /></IsNotNull></Where></Query></View>
Run Code Online (Sandbox Code Playgroud)

顺便说一句,在 Item 上设置唯一权限似乎也为 List 本身添加了一个标志,这大概是 /_layouts/15/uniqperm.aspx 页面设法如此快速地在 biiiig 站点上返回答案(以及含糊不清的“Lists可能包含具有独特权限的项目”消息)。您可以使用此额外的XML,以确定列出了(可能)包含具有唯一权限,这是项目大大高于枚举列表中的每个项目,找出更有效的,如果任何人有独特的权限。如果您的站点包含许多列表或任何大型列表,这将特别有价值。

此 PnP PowerShell 代码返回所有(可能)具有唯一权限的项目的列表:

Get-PnPList -Includes SchemaXml | ? {$_.SchemaXML -match "SharedWithDetails"}
Run Code Online (Sandbox Code Playgroud)

一旦你有了列表,你就可以使用 Get-PnPListItem 和上面的 CAML 查询来有效地只返回具有唯一权限的项目,不必枚举/加载列表中的每个项目:

Get-PnPListItem -List [YourList] -Query "<View><Query><Where><IsNotNull><FieldRef Name='SharedWithDetails' /></IsNotNull></Where></Query></View>"
Run Code Online (Sandbox Code Playgroud)