如何在marklogic中检查用户权限

如何在marklogic中检查用户权限,marklogic,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

如何构造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>
$u英寸/秒的
:用户
让$n:=字符串($u/sec:用户名)
以$n订购
返回
{$n}
{秒:获取角色名称($u/sec:role-id/sec:role-id)
!{string(.)}
试试这个(请注意,如果您使用的是ML9,您可以使用新的xdmp:role name函数,但以下内容也适用于ML8):

xquery版本“1.0-ml”;
导入模块命名空间sec=”http://marklogic.com/xdmp/security“at”/MarkLogic/security.xqy”;
对于$u英寸/秒:用户
让$n:=字符串($u/sec:用户名)
以$n订购
返回
{$n}
{
对于$u/sec中的$role id:role id/sec:role id
让$role name:=sec:get角色名称($role id)/fn:string()
按$role name排序
返回元素角色{$role name}
}

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

您需要一个文档或数据库uri作为起点。您可以将uri提供给一个函数,如。这将返回哪些角色对该特定uri具有哪些权限。将其与附加到感兴趣的用户的角色相交,您将知道该用户是否可以访问或更新文档


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

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>