当前位置: 首页 > 知识库问答 >
问题:

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

武功
2023-03-14

我试图使用其他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使用一个多部分内容元数据消息设置权限,它也会做同样的事情)。

使用相同的用户和数据库,通过直接xquery调用(例如xdmp:document insertwith permissions)设置权限,效果与预期相同。

如何防止RESTAPI添加这些额外权限?

编辑:

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

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

共有2个答案

笪煌
2023-03-14

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

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

施凡
2023-03-14

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

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

 类似资料:
  • 我们可以为文档的不同部分添加不同的权限吗? 例如,PDF格式的书籍被插入到数据库中,第一章应可供所有用户或普通用户免费访问,而整本书仅可供高级用户或付费用户访问。 如何在MarkLogic中实现这一点,而不维护原始版本的免费版本。

  • 我的应用程序具有“附加文件”、“拍照”、“拍摄视频”等功能。我正在将文件Uri传递给一个新的Intent,但在Nougat中得到了FileUriExposedException。因此已修改代码以使用FileProvider。我的Content Uri很好,但当我尝试读取或上传文件/图片/视频时,我java.io.FileNotFoundException。我设置权限错误吗?还是需要以其他方式设置权

  • 问题内容: 我将如何通过XSLT 将文件的doctype 干净地 设置为HTML5 (在这种情况下,使用Collective.xdv) 以下是我的Google foo能够找到的最好的结果: 产生: 问题答案: 我认为目前仅通过将文档类型写为文本来支持此操作: 这将产生以下输出:

  • 用户在轻推上传文件时,考虑到对文件的传播有着不同的考量,因此在发送文件时也可以对文件的转发和下载权限进行设置。转发权限可选择:可转发、仅在企业内转发、不可转;下载权限可设置:可下载和不可下载。 例如,当文件为企业内的重要文件,仅希望企业内员工可见,不希望外传时,则可以设置文件为仅在企业内转发,不可下载;设置后,则该文件只能在企业内分享,文件可以支持在线预览,不可下载,并且将加上阅读者的名字和手机号

  • 我正在尝试使用NodeJS v8在Firestore上创建一个引用文档。6.0。像这样 虽然ref是一个文档参考,但它会导致 错误:参数“data”不是有效文档。输入对象深度超过20层或包含一个循环。 有无论如何要做的NodeJS(管理)SDK? 此外,代码中使用的包是 和 输出 完整的错误消息是

  • 问题内容: 创建用户AD帐户时,我正在使用Python创建一个新的个人文件夹。正在创建文件夹,但权限不正确。Python可以将用户添加到新创建的文件夹并更改其权限吗?我不确定从哪里开始编码。 问题答案: 您需要模块,它是pywin32的一部分。这是做您想做的事情的示例。 该示例为该文件创建了一个新的DACL并替换了旧的DACL,但是修改现有的DACL很容易。您需要做的就是从安全描述符中获取现有的D