2016-10-01 74 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