我正在尝试查找具有特定安全角色的记录,但似乎没有找到使用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万个记录范围内,即使在任务服务器上也要花费一个多小时。有没有更简单的方法来通过其权限角色名称查找记录?
这种循环方法本来就很慢,因为它将把每个文档从磁盘上拉出来以提取其权限。 1500万份文档意味着1500万次磁盘提取。无论代码如何,这都很慢。
最快和最简单的回答方法是,使并成为具有这两个角色的用户,并对数据库中的所有URI进行cts:uris
查询,答案将自动且有效地限制了可见的URI。这两个角色。
如果您需要在不创建此类用户的情况下更加动态,则管理员用户可以使用角色列表来xdmp:login
。