使用MarkLogic的REST API设置文档权限

时间:2013-12-04 19:38:00

标签: rest permissions marklogic

我正在尝试使用其余的api为 MarkLogic 6 数据库中的文档指定权限。

这是我发送的权限元数据(permissions.xml):

<rapi:metadata xmlns:rapi="http://marklogic.com/rest-api"
     xmlns:prop="http://marklogic.com/xdmp/property">
    <rapi:permissions>
        <rapi:permission>
            <rapi:role-name>arole</rapi:role-name>
            <rapi:capability>update</rapi:capability>
        </rapi:permission>
        <rapi:permission>
            <rapi:role-name>brole</rapi:role-name>
            <rapi:capability>read</rapi:capability>
        </rapi:permission>
    </rapi:permissions>
</rapi:metadata>

使用此命令:

curl --anyauth --user user:pass -X PUT -T permissions.xml \
    -H "Content-type: application/xml" \
    "http://localhost:8003/v1/documents?uri=/test/test.xml&category=permissions"

之后我查看权限时,我看到:

arole (update)
brole (read)
rest-reader (read)
rest-writer (update)

我希望它只拥有arole和brole的权限。

文档说:“如果没有明确设置权限,那么使用 MarkLogic REST API 创建的文档对其余读者角色具有读取权限,并具有休息的更新权限 - 作家角色。“ (是的,我知道,这个例子不会创建一个新文档。但如果我添加一个新文档并通过其余的api使用多部分内容+元数据消息同时设置权限,它会做同样的事情。) / p>

使用相同的用户和数据库通过直接xquery调用(带有权限的例如xdmp:document-insert)设置权限,按预期工作。

如何保持其余的api添加这些额外的权限?

编辑:

MarkLogic上有一张票,我还没知道目标日期或版本。

如果遇到其他人,他们确实给了我一个解决方法:创建新角色(或更改现有角色),并给予他们休息阅读器和/或休息写入者'执行'权限,而不是让他们继承rest-reader / rest-writer角色,或者让用户直接分配其余读者/ rest-writer角色。

2 个答案:

答案 0 :(得分:3)

内部函数docmodupd:write-permissions始终将输入权限与xdmp:default-permissions的输出结合起来。这样做是为了确保rest-reader可以阅读文档,rest-writer可以更新文档。据我所知,没有API来控制这种行为。

如果你有一个强大的用例来省略这些额外的权限,请联系支持部门。

答案 1 :(得分:2)

通过REST完成访问但不是对文档的通用访问的最简单方法是创建可以分配给用户的自定义角色来代替内置角色。如果需要,为该角色添加默认读/写权限(这样您就不必为每个文档插入指定权限),以及您希望角色拥有的REST执行权限({{3} },http://marklogic.com/xdmp/privileges/rest-writer)。不要将rest-reader或rest-writer内置角色分配给自定义角色,只分配执行权限。

然后,自定义角色将能够使用所有REST端点,但不会对通过REST接口创建的所有文档具有通用访问权限。搜索和记录GET请求将仅返回自定义角色可以访问的文档,并且他们将无法修改其角色没有更新权限的文档。