xquery查找具有特定安全角色的记录

问题描述 投票:0回答:1

我正在尝试查找具有特定安全角色的记录,但似乎没有找到使用cts:search来做到这一点的方法(应该比for循环要快)。这是for循环:

let $validRoleList := (
    xdmp:role("myRole1"),
    xdmp:role("myRole2")
)
for $recordUri in cts:uris((), (), cts:collection-query("bigCollection"))
let $documentPermissions := xdmp:document-get-permissions($recorduri)/sec:role-id/fn:string()
let $intPermissions := 
    for $permissionValue in $documentPermissions
    return xs:unsignedLong($documentPermissions)
where $intPermissions eq $validRoleList
return $recordUri

我的“ bigCollection”处于1500万个记录范围内,即使在任务服务器上也要花费一个多小时。有没有更简单的方法来通过其权限角色名称查找记录?

xquery marklogic
1个回答
0
投票

这种循环方法本来就很慢,因为它将把每个文档从磁盘上拉出来以提取其权限。 1500万份文档意味着1500万次磁盘提取。无论代码如何,这都很慢。

最快和最简单的回答方法是,使并成为具有这两个角色的用户,并对数据库中的所有URI进行cts:uris查询,答案将自动且有效地限制了可见的URI。这两个角色。

如果您需要在不创建此类用户的情况下更加动态,则管理员用户可以使用角色列表来xdmp:login

© www.soinside.com 2019 - 2024. All rights reserved.