2017-09-05 62 views
2

如何构建xquery以获取用户角色和权限(读取,更新,插入..)?我有用户的角色。无法获得用户的权限。如何在marklogic中检查用户权限

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> 

回答

2

虽然rjrudin的答案可以帮助你找到连接到用户的角色,它不会说任何关于角色的权限。但它不能,因为每个文档都会控制权限。

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

HTH!

2

试试这个(请注意,如果你在ML9,您可以使用新的xdmp:角色名功能,但下面将在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

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