具有上次登录数据库的MarkLogic用户管理

时间:2017-03-14 18:54:38

标签: rest xquery marklogic user-management marklogic-8

我尝试在MarkLogic上管理LDAP身份验证的用户。我希望能够检查每个用户的Last-login值。我想从REST界面执行此操作。但是,MarkLogic仅返回显示我的管理用户登录活动的文档。 qconsole也是如此。如果我浏览 上次登录内容来源,则会显示所有登录文档,我可以查看内容。我希望能够使用xquery和REST获取文档。

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

1 个答案:

答案 0 :(得分:2)

事实证明我们的系统中列出了一个错误,表明min-device-width : 480px 接受了用户ID参数,但返回了当前用户的信息。

作为一种解决方法,我建议编写一个REST extension来回答您正在寻找的内容。像这样:

xdmp:user-last-login()

这将检查Last-Login数据库。它现在很难编码;调用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" -d@"./last.xqy" \
  "http://localhost:8000/LATEST/config/resources/last-login?method=get&get:username=xs:string"

注意用户参数前面的“rs:”,这是REST API所必需的。