2009-11-16 59 views
1

我需要根據Drupal用戶角色限制Drupal站點上的內容訪問。按角色可訪問的Drupal部分

http://site.com/managers/intro

http://site.com/managers/reviews

http://site.com/managers/up-for-raises

內容可以是多個內容類型的,並且不限於一個特定內容類型。這些內容類型將在網站的其他地方使用,所以我無法鎖定整個內容類型。

創建時,我可以通過菜單設置獲得所有節點/視圖,但我不知道如何通過template.php中的一堆預處理函數來限制通過角色訪問,但這似乎是錯誤的做法。

我搜索了一個模塊,並在#drupal-support IRC上詢問,但沒有發現使用drupal角色作爲限制因素的結果。

回答

1

如果我說得對,你試圖實現的是隻有某些角色能夠訪問位於給定URL的頁面。

使用contrib請訪問模塊

正如已經提到mcrittenden,有一個plethora of modules,使您可以調整內容的訪問。其中,content access肯定可以做你想做的事情,因爲它允許你分別設置每個節點的權限。

BY標誌使用+ VIEWS

另一種可能的方式做到這一點無需編碼,與flag moduleviews module的組合。下面是我會怎麼做簡要概述:

  1. 創建三個標誌,你可以用它來標記的內容(任何類型的內容!),將有在任何你在你的問題中指定的地址查看(例如:創建一個標誌「intro」,用於標記必須在「/ manger/intro」頁面顯示的節點)
  2. 創建3個視圖(針對您在問題中列出的每個地址)將根據您的標誌過濾出您需要的節點。
  3. 根據角色設置這些視圖的權限。

通過寫支票URI和BLOCK未經授權的用戶

你肯定能做到這一點的模塊。主要的優勢在於,它將是CPU和內存負載方面的一個非常輕量級的解決方案,但是您需要注意一些問題。例如,您始終可以通過網址以http://example.com/node/nodenumber的格式訪問您的內容,因此您必須檢查URL的別名。但也是事實,即用戶可能追加一個虛假?什麼的URL,你必須寫正則表達式採取賬戶這種情況下...

(也是給出的rules module的想法mcrittenden是一個很好的例子,但我沒有提到它,因爲我只是在閱讀他的答案時纔想到它)。

希望這會有所幫助!

+0

http://drupal.org/project/globalredirect模塊應該照顧「node/123」。它將所有的URL重定向到單個路徑,如果可能的話,寧願使用別名。您也可以使用hook_menu_alter來拒絕對每個節點的訪問,然後按照描述重新啓用具有路徑的節點的訪問。 – Grayside 2009-11-16 17:18:16

2

在我看來,如果'管理員'總是在該部分的URL中,你可以編寫一個小模塊,使用hook_init來基本上說明當前用戶的角色是否不是這些指定角色之一,url包含「/ managers /」,然後是drupal_goto()登錄頁面。

你也可以使用Rules模塊很容易地完成這項工作,但如果這是你將要使用Rules的唯一的東西,那麼這是不值得的。還有很多逐節點模塊(比如所有東西的nodeaccess),但是這些也可能是更多的努力,因爲完成這樣一個簡單的任務是值得的。

+0

我有規則已經安裝,但我是新規則。我將如何去做一個規則/觸發組合來檢測角色和網址模式? – easement 2009-11-16 18:19:46

+0

我設置了一個觸發規則,以便在查看內容時可以重定向到登錄。但是,我不知道如何將規則分配給特定的內容。 – easement 2009-11-16 18:28:11

+0

您應該可以添加將規則應用於的頁面縮小的條件。 – 2009-11-17 13:02:41

0

您也可以調查Menu Access,它允許您將角色和菜單,角色和菜單樹之間的訪問關聯起來。 (請記住,在Drupal中,「菜單路由器」表神奇地不僅僅是UI,還包括將每段內容連接到URL的流量路由器。)

由於所有項目都與菜單條目相關聯,您沒有路徑別名不一定是通用的問題。您還可以使用模塊(如Menu Block)來模擬書籍導航。

儘管它的完整推薦狀態爲&,但該模塊似乎更接近Alpha版或Beta版,因此在生產站點上應小心謹慎。

4

雖然這是一個老問題,但Path Access模塊現在完成了這一步。這是從其項目頁面摘錄:

...給站點管理員一個額外的訪問控制層到Drupal網站的所有頁面。

優點:雖然很多Drupal模塊提供了某種程度的訪問控制權限,但它從未涵蓋用戶所有可能的要求。 Path_access提供了根據路徑別名限制頁面的方法 - 這意味着您可以使用通配符鎖定站點整個部分的某些用戶角色組。

+0

不錯。這是一段時間以來一直很瞭解的事情。我製作了一個非常輕量級的模塊,可以進行一些簡單的檢查,但本來很好的方法是節省開發時間。 – easement 2010-02-15 15:05:12