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

7

我正在使用REST 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创建的文档将具有rest-reader角色的读取权限和rest-writer角色的更新权限。"(是的,我知道,此示例未创建新文档。但是,如果我同时使用多部分内容+元数据消息通过rest api添加新文档并设置权限,则会执行相同的操作)。

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

如何使rest api不添加这些额外的权限?

编辑:

与MarkLogic有个问题,目前还没有目标日期或版本。

如果其他人也遇到这个问题,他们可以尝试一个解决方法:创建新的角色(或更改现有角色),并为它们赋予rest-reader和/或rest-writer的“执行”权限,而不是继承rest-reader/rest-writer角色,或直接指定用户分配rest-reader/rest-writer角色。

2个回答

3

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

如果您有强烈的需求省略这些额外的权限,请联系支持团队。


只是为了确保我理解rest-reader角色如何与文档权限配合使用...这意味着所有可以访问rest api的用户都可以看到这个文档,对吗? - paloma

2
实现REST访问但不实现文档的普遍访问最简单的方法是创建自定义角色,并将其分配给用户以替代内置角色。如果需要,请将默认的读/写权限添加到该角色(这样您就不必在每个文档插入时指定权限),以及您希望该角色具有的REST执行特权 (http://marklogic.com/xdmp/privileges/rest-writer, http://marklogic.com/xdmp/privileges/rest-reader)。不要将rest-reader或rest-writer内置角色分配给自定义角色,只需分配执行特权即可。
然后,自定义角色将能够使用所有REST端点,但将无法普遍访问通过REST接口创建的所有文档。搜索和文档GET请求仅返回自定义角色有权访问的文档,他们将无法修改其角色没有更新权限的文档。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接