我正在努力正确设置我的用户权限/特权/角色以获得我需要的行为。
我正在使用 MarkLogic 8 和 Roxy 来创建和部署应用程序。
此应用程序具有不同的用户,这些用户的内容应仅限于单个用户。但他们也参与需要共同协作的项目。
我看过这个有用的博客和关于 github 问题 303 的讨论,但仍然无法正确处理。
默认 roxy 应用用户角色:
<role>
<role-name>${app-role}</role-name>
<description>A role for users of the ${app-name} application</description>
<role-names>
</role-names>
<permissions>
<permission>
<capability>execute</capability>
<role-name>${app-role}</role-name>
</permission>
<permission>
<capability>update</capability>
<role-name>${app-role}</role-name>
</permission>
<permission>
<capability>insert</capability>
<role-name>${app-role}</role-name>
</permission>
<permission>
<capability>read</capability>
<role-name>${app-role}</role-name>
</permission>
</permissions>
<collections>
</collections>
<privileges>
<privilege>
<privilege-name>xdmp:value</privilege-name>
</privilege>
<privilege>
<privilege-name>xdmp:add-response-header</privilege-name>
</privilege>
<privilege>
<privilege-name>xdmp:invoke</privilege-name>
</privilege>
<privilege>
<privilege-name>xdmp:with-namespaces</privilege-name>
</privilege>
</privileges>
</role>
我的自定义角色:
<role>
<role-name>sccss-user</role-name>
<description>sccss default role</description>
<role-names>
<!-- TODO test which roles we really need -->
<!--
<role-name>alert-user</role-name>
<role-name>alert-internal</role-name>
<role-name>rest-admin</role-name>
<role-name>rest-writer-internal</role-name>
<role-name>rest-reader</role-name>
<role-name>network-access</role-name>
<role-name>qconsole-user</role-name>
-->
<!-- cluey app role for rest api access TODO replace with dedicated api user and role
<role-name>${app-role}</role-name>
-->
</role-names>
<permissions>
</permissions>
<collections>
</collections>
<privileges>
<!-- HK -->
<!--
<privilege>
<privilege-name>any-uri</privilege-name>
</privilege>
-->
<privilege>
<privilege-name>devices-uri</privilege-name>
</privilege>
<privilege>
<privilege-name>any-collection</privilege-name>
</privilege>
<!-- to make this role have acces to the REST API-->
<privilege>
<privilege-name>rest-reader</privilege-name>
</privilege>
<privilege>
<privilege-name>rest-writer</privilege-name>
</privilege>
<!-- TODO test this
<privilege>
<privilege-name>xdmp:value</privilege-name>
</privilege>
<privilege>
<privilege-name>xdmp:add-response-header</privilege-name>
</privilege>
<privilege>
<privilege-name>xdmp:invoke</privilege-name>
</privilege>
<privilege>
<privilege-name>xdmp:with-namespaces</privilege-name>
</privilege>
</privileges>
-->
</role>
我已经测试并尝试了上面博客中描述的内容,但是使用这些设置我无法访问任何文档,显然没有其他扩展访问权限。如果我给我的用户 {app-role} 它给出了用户可以看到其他用户的私人内容的问题......因为所有用户都有'rest-reader'角色......所以我需要限制默认 - app 角色不使用 rest-reader 角色并使用 rest-reader 权限但不能让它工作......
我正在考虑的一种选择是document-insert()
对受限内容使用权限,但如果我可以正确设置,这应该可以通过正确的角色和权限实现,对吧?
添加
回应 Grtjn 的回答:谢谢 4 您的评论,我想我对 REST 角色感到困惑。如果我在 git 上查看 roxy 应用程序中的默认角色,这些角色看起来是空的,但是当我将我的 roxy 应用程序类型设置为 REST 应用程序时,事情似乎变得更加复杂。主要的困惑是我需要哪些角色和权限才能让第二个(独立)角色能够使用 REST 端点?xdmp:(value,add-response-header, invokes etc) 权限到底在做什么和需要什么?在我的示例中,为了让用户能够访问 REST api,他/她需要以下角色:
<role-name>${app-role}</role-name>
<!-- we need this to amp internal privileges-->
<role-name>alert-user</role-name>
<role-name>alert-internal</role-name>
<role-name>rest-admin-internal</role-name>
然后我们开始讨论休息读者应该是特权还是角色?
所以一个更具体的问题:
访问由 roxy REST 类型应用程序创建的 REST 端点需要的最小角色/权限集是多少?