我正在使用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角色。