如何检查marklogic中的用户权限

How to check user permissions in marklogic

如何构造xquery获取用户角色和权限(读取、更新、插入..)?我有用户的角色。无法获取用户权限。

for $u in /sec:user
    let $n := string($u/sec:user-name)
 order by $n
 return
      <user>
            <name>{ $n }</name>
           { sec:get-role-names($u/sec:role-ids/sec:role-id)
             !<role>{ string(.) }</role> }
      </user>

试试这个(请注意,如果您使用的是 ML9,则可以使用新的 xdmp:role-name 函数,但下面的函数也适用于 ML8):

xquery version "1.0-ml";
import module namespace sec="http://marklogic.com/xdmp/security" at "/MarkLogic/security.xqy";
for $u in /sec:user
let $n := string($u/sec:user-name)
order by $n
return
  <user>
    <name>{$n}</name>
    {
      for $role-id in $u/sec:role-ids/sec:role-id 
      let $role-name := sec:get-role-names($role-id)/fn:string()
      order by $role-name
      return element role {$role-name}
    }
  </user>

虽然 rjrudin 的回答可以帮助您找到附加到用户的角色,但它不会说明附加到角色的权限。但是,它不能,因为权限是按文档控制的。

您需要一个文档或数据库 uri 作为起点。您将 uri 提供给像 xdmp:document-get-permissions 这样的函数。这将 return 哪些角色对该特定 uri 具有哪些权限。将其与附加到相关用户的角色相交,您将知道用户是否可以访问或更新文档。

HTH!

答案的另一个方面,添加到@rjrudin 和@grtjn 的答案中。在 MarkLogic 中,用户可能具有默认权限,如果未指定权限,将应用于新文档。您可以从 sec:user-get-default-permissions 获得这些权限。但是,常见的方法是查看基于文档的权限,而不是基于用户的权限。