2017-09-05 24 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獲得這些權限。然而,通常的做法是以文檔爲基礎而不是以用戶爲基礎來查看權限。