我尝试在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
答案 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所必需的。