如何检查marklogic中的用户权限

时间:2017-09-05 19:29:13

标签: 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>

3 个答案:

答案 0 :(得分:2)

试试这个(请注意,如果您使用的是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>

答案 1 :(得分:2)

虽然rjrudin的回答可以帮助您找到附加到用户的角色,但它不会说明与角色相关的权限。但是,它无法按照文档控制权限。

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

HTH!

答案 2 :(得分:1)

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