Я изо всех сил пытаюсь правильно настроить права/привилегии/роли пользователя, чтобы получить нужное мне поведение.
Я использую MarkLogic 8 и Roxy для создания и развертывания приложения.
У этого приложения есть разные пользователи, у которых есть контент, который должен быть ограничен отдельным пользователем. Но они также участвуют в проектах, в которых им необходимо сотрудничать вместе.
Я видел этот полезный блог и обсуждение проблемы 303 github, но до сих пор не могу понять это правильно.
Роль пользователя приложения 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}, это создает проблему, заключающуюся в том, что пользователи могут видеть личный контент других пользователей... потому что у всех пользователей есть роль "остального-читателя"... Поэтому мне нужно ограничить значение по умолчанию- роль приложения, чтобы не использовать роль чтения остальных и использовать привилегии чтения остальных, но не могу заставить ее работать...
Один из вариантов, который я рассматриваю, — использовать разрешения document-insert()
для ограниченного контента, но это должно быть возможно с правильными ролями и привилегиями, если я смогу правильно настроить его, верно?
ДОБАВЛЕНИЕ
В ответ на ответ Grtjn: спасибо за ваши комментарии, я думаю, что озадачен ролями REST. Если я посмотрю на роли по умолчанию в приложении roxy на git они выглядят пустыми, но когда я устанавливаю тип приложения roxy в качестве приложения REST, все становится сложнее. Основная путаница заключается в том, какие роли и привилегии мне нужны, чтобы вторая (независимая) роль могла использовать конечную точку REST? Каковы привилегии xdmp: (значение, добавление-ответа-заголовка, вызовы и т. д.) и для чего они нужны? В моем примере, чтобы пользователь мог получить доступ к 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>
А затем мы приступаем к обсуждению, должно ли чтение остальных быть привилегией или ролью?
Итак, более конкретный вопрос:
Каков минимальный набор ролей/привилегий, который мне потребуется для доступа к конечной точке REST, созданной приложением типа roxy rest?