2017-03-14 44 views
3

我試圖在MarkLogic上管理LDAP身份驗證的用戶。我希望能夠檢查每個用戶的Last登錄值。我想從REST界面執行此操作。但是,MarkLogic只會返回一個顯示我的管理用戶登錄活動的文檔。 qconsole也是如此。如果我探索最後登錄內容來源,所有登錄文件顯示,我可以查看內容。我希望能夠通過xquery和REST獲取文檔。使用上次登錄數據庫的MarkLogic用戶管理

xdmp:user-last-login(xdmp:user("myCurrentUser")) 

回報:

<last-login xmlns="http://marklogic.com/xdmp/last-login"> 
    <user-id>191939440856729280</user-id> 
    <last-successful-login>2017-03-14T18:16:13Z</last-successful-login> 
    <last-unsuccessful-login> 
    </last-unsuccessful-login> 
    <number-unsuccessful-logins>0</number-unsuccessful-logins> 
    <display-last-login>true</display-last-login> 
</last-login> 

如果我嘗試看看與myCurrentUser(誰是管理員)其他用戶,我得到:

xdmp:user-last-login(xdmp:user("someOtherUser")) 

回報:

您查詢返回空序列

我希望能夠獲得其他用戶的最後登錄值。我想監視誰不在使用我的羣集,然後在他們沒有主動使用羣集時將其刪除。這是做這件事的最好方法嗎?有沒有更好的辦法?這對MarkLogic來說甚至是可能的嗎?

for i in (list of LDAP names) 
do 
    curl -s --anyauth --user myUser:$(cat pass) -X POST -i \ 
    -d "xquery=xquery version \"1.0-ml\";xdmp:user-last-login(xdmp:user(\""$i"\"))" \ 
    -H "Content-type: application/x-www-form-urlencoded" \ 
    "http://$(hostname):8000/v1/eval" 
done 
+0

重新閱讀MarkLogic文檔後,它看起來像**另一個**錯誤。 https://docs.marklogic.com/xdmp:user-last-login – mikel

+0

你運行的是什麼版本的MarkLogic? –

+0

我正在8.0-5.4和8.0-6上試試這個。這兩個都在CentOS 6.8上完全修補。我在Last-Login數據庫中將搜索引向了「basic」。 App-Services appserver具有分配給「Last-Login」db的最後登錄選項。 – mikel

回答

2

事實證明,我們在我們的系統表明xdmp:user-last-login()需要一個用戶ID參數中列出的錯誤,而是返回當前用戶的信息。

作爲一種解決辦法,我建議寫一個REST extension這個問題的答案,你在找什麼。類似這樣的:

xquery version "1.0-ml"; 

module namespace last = "http://marklogic.com/rest-api/resource/last-login"; 

declare namespace ll = "http://marklogic.com/xdmp/last-login"; 

declare option xdmp:mapping "false"; 

declare function last:get(
    $context as map:map, 
    $params as map:map 
) as document-node()* 
{ 
    let $user-id := 
    try { 
     xdmp:user(map:get($params, "username")) 
    } catch ($e) { 
     if ($e/error:code = "SEC-USERDNE") then() 
     else xdmp:rethrow() 
    } 
    return 
    if ($user-id) then (
     document { 
     xdmp:invoke-function(
      function() { 
      /ll:last-login[ll:user-id = $user-id] 
      }, 
      map:entry("database", xdmp:database("Last-Login")) 
     ) 
     } 
    ) 
    else (
     map:put($context, "output-status", (400, "No such user")) 
    ) 
}; 

這會檢查上次登錄數據庫。它現在很難編碼;呼籲admin:appserver-get-last-login會更好。

部署:

$ curl --anyauth --user user:password -X PUT \ 
    -H "Content-type: application/xquery" [email protected]"./last.xqy" \ 
    "http://localhost:8000/LATEST/config/resources/last-login?method=get&get:username=xs:string" 

而且撥打:

$ curl --anyauth --user admin:admin -X GET \ 
    "http://localhost:8000/LATEST/resources/last-login?rs:username=admin" 

注意 「RS:」 在用戶名參數,它是由REST API所需的面前。