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

Posted

技术标签:

【中文标题】使用 MarkLogic 的 REST API 设置文档权限【英文标题】:Setting permissions on a document using MarkLogic's REST API 【发布时间】:2013-12-21 11:16:12 【问题描述】:

我正在尝试使用 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 角色具有更新权限-作家角色。” (是的,我知道,这个例子并没有创建一个新文档。但是如果我添加一个新文档并同时使用多部分内容+元数据消息通过 rest api 设置权限,它会做同样的事情)。

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

我怎样才能阻止其余的 api 添加这些额外的权限?

编辑:

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

万一其他人遇到这种情况,他们确实给了我一个解决方法:创建新角色(或更改现有角色),并赋予他们 rest-reader 和/或 rest-writer '执行'权限,而不是让他们继承rest-reader/rest-writer 角色,或让用户直接分配 rest-reader/rest-writer 角色。

【问题讨论】:

【参考方案1】:

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

如果您有忽略这些额外权限的强大用例,请联系支持人员。

【讨论】:

只是为了确保我了解 rest-reader 角色如何使用文档权限...这意味着可以访问 rest api 的 所有 用户可以看到这个文件,对吧?【参考方案2】:

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

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

【讨论】:

以上是关于使用 MarkLogic 的 REST API 设置文档权限的主要内容,如果未能解决你的问题,请参考以下文章

功能/集成测试 NodeJS ReST API 实现

MarkLogic 10 - 从服务器上的远程位置配置应用服务器、森林和数据库

Camel + marklogic不使用Marklogic Content Pump

DocuSign Rest API - 需要某些 PDF 字段

MarkLogic:在 SPARQL 查询中使用聚合函数

Marklogic - 无效的实体引用问题