2016-10-01 89 views
1

我很努力地获得我需要的行为,正确设置我的用户权限/特权/角色。未能创建自定义用户权限来限制内容

我使用MarkLogic 8和乐声创建和部署应用程序。

此应用程序有有应仅限于个人用户的内容不同的用户。但他们也参与他们需要合作的项目。

我已经看到了这helpful blogdiscussion on github issue 303,但仍无法得到它的权利。

默认乐声应用的用户角色:

<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-作用}它使用户可以看到其他用户的问题私人内容......因为所有用户都具有‘其他阅读器’的作用...... 所以我需要限制默认应用程序的作用,不使用其余阅读器的角色,并使用休息阅读器的权限,但不能得到它的工作...

我正在考虑的一个选项是使用document-insert()权限的限制内容,但这应该是可能的有正确的角色和特权,如果我可以正确设置它,对吗?

加成

在repsonse到Grtjn的回答是:THX 4你的意见,我觉得我对REST的角色感到困惑。如果我在git上的roxy应用中查看default roles,那些看起来是空的,但是当我将roxy应用类型设置为REST应用时,事情似乎变得更加复杂。主要的困惑是我需要什么样的角色和特权来让第二个(独立)角色能够使用REST端点?什么是xdmp:(值,add-response-header,调用等等)权限准确地做和需要?在我的例子使用户能够访问他/她需要以下角色的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端点由乐声其他类型的应用程序创建?

回答

1

我在这里推荐采取以下方法:

使用应用程序角色的应用程序执行,而不是内容访问下手。出于这个原因,从该角色中删除默认权限,只给它休息阅读器/休息写作者权限,也许运行MLCP等的一些特权。

接下来,确保不是由乐声部署REST扩展,和其他任何直接,得到读取和执行文件的权限。考虑使用自定义代码,sql-views或未使用部署模式加载的模式创建的触发器和警报等我们在搪塑marklogic节点使用change_permissions函数可以作为例子,如何处理这个问题:https://github.com/marklogic/slush-marklogic-node/pull/298/files#diff-a529d1d70bd21866e1d12eda3a99f7b6R96

一旦有创建需要单独授权访问的内容的每个部分的专用角色。如果您需要一组文档才能被一个用户访问,您将需要一个用户特定的角色。如果您还有一组只能由项目成员访问的文档,则还需要项目特定的角色。如果您还需要区分读/写,请为每个(两个用户,两个项目角色)分别设置两个角色。这些角色将不具有权限,并且不应该继承角色(可能会继承相应的读取角色的写入除外)。

一旦你拥有了读/写角色,你就可以开始考虑如何正确地将它们应用于获取文档的权限。有了这种复杂程度,您可能想要避免默认权限,并明确选择文档权限。 xdmp:document-insert,MLCP和/ v1 /文件都具有明确的文档权限,因此您应该对这些文档拥有合理的控制权。

加成

注意在乐声的开箱毫升-config文件的。它不适合REST类型的应用程序。这就是slush-marklogic-node生成器修补ml-config的原因:https://github.com/marklogic/slush-marklogic-node/blob/master/slushfile.js#L346

对REST api具有读访问权限的最低限度是rest-reader priv,并且具有对REST api的更新访问权限其余作家特权。 REST扩展是从模块数据库运行的,而不是从文件系统运行的,所以你需要另外的模块访问。上面提到的change_permissions函数为您解决了这个问题。

无论如何,我的一般建议是使用应用程序角色执行应用程序,就像前面提到的那样,以及数据访问的其他角色。任何想要使用该应用程序的用户都应该继承应用程序角色,以及其他一些角色以提供适当数量的数据访问。

HTH!

+0

嗨Grtjn,我已经更新了我的问题,更具体一些......希望您能分享一下您的看法? thx –

+0

我详细阐述了一下。如果仍然不清楚,也许触摸底座.. – grtjn