2017-03-14 14 views
3

MarkLogicでLDAP認証ユーザーを管理しようとしています。私は、各ユーザのLast-login値をチェックできるようにしたい。私はRESTインターフェイスからこれをやりたいと思います。ただし、MarkLogicは管理者のログインアクティビティを示す文書のみを返します。 qconsoleからも同様です。もし最終ログインコンテンツソースを検索すると、すべてのログイン文書が表示され、その内容を見ることができます。私はxqueryとRESTでドキュメントを手に入れたいと思っています。LastLogicデータベースを使用した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> 

私は(admin)をmyCurrentUserを持つ別のユーザーを見しようとすると、私が手:

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

リターン:

あなたをクエリが空のシーケンスを返しました

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と呼ぶ方が良いでしょう。 "RS:"

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

注:REST APIによって必要とされるユーザ名パラメータの前でを

$ 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" 

を、コール:デプロイするに

関連する問題