代码之家  ›  专栏  ›  技术社区  ›  Janis Veinbergs

根据列表项的权限查询列表项

  •  0
  • Janis Veinbergs  · 技术社区  · 14 年前

    不知道怎么用谷歌搜索,但是有没有办法查询所有的项目

    • 权限对ListItem是唯一的
    • 这些唯一权限包含特定组x的分配。
    3 回复  |  直到 6 年前
        1
  •  1
  •   Wout    14 年前

    您必须遍历这些项,并检查每个项的权限项,如果相关,则更新它们。你拥有的东西越多,花费的时间就越长。所以不是一个很好的解决方案。

    另一种解决方案是使用仅是组x成员的用户的凭据。 sharepoint会自动考虑权限。因此,如果使用该用户连接到列表,则应仅获取该用户具有权限的项目。 使用networkcredentials类执行此操作。

    然后使用caml查询更新项目。

    -W

        2
  •  1
  •   kevmaitland    6 年前

    旧的帖子,但仍然有很多观点,我找不到更相关的地方说这个。现在有一些快捷方式,你 可以 使用caml只返回具有唯一权限的项,而不使用hasuniqueroleagnitions属性。

    共享/设置列表项的唯一权限会将隐藏的“field”节点(“sharedwithdetails”&“sharedwithusers”)添加到其schemaxml属性中,您可以使用caml进行筛选:

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

    顺便说一句,设置一个项目的唯一权限似乎也会给列表本身添加一个标志,这大概就是/_layouts/15/uniqperm.aspx页面如何如此快速地在biiig站点上返回答案(以及含糊不清的“可能包含具有唯一权限的项目的列表”message)。您可以使用这个额外的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>"
    
        3
  •  0
  •   Paul Lucas    14 年前

    我不认为您可以通过构造一个caml查询并使用spquery对象以这种方式获取项目来实现这一点。

    我的想法是获取所有项,并循环通过它们来测试hasuniqueroleagnitions和roleasignments属性。