使用 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 设置文档权限的主要内容,如果未能解决你的问题,请参考以下文章
MarkLogic 10 - 从服务器上的远程位置配置应用服务器、森林和数据库
Camel + marklogic不使用Marklogic Content Pump