簡體   English   中英

Drupal部分可按角色訪問

[英]Drupal section accessible by role

我需要根據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角色為限制因素的結果。

盡管這是一個古老的問題,但是路徑訪問模塊現在確實可以做到這一點。 以下是其項目頁面的摘錄:

...為站點管理員提供了對Drupal站點所有頁面的訪問控制的附加層。

好處:盡管許多Drupal模塊提供了一定程度的訪問控制權限,但它從未涵蓋用戶的所有可能需求。 Path_access提供了根據頁面的路徑別名來限制頁面的方法-這意味着您可以使用通配符將某些用戶角色組鎖定在網站的整個部分中。

在我看來,如果“ managers”始終位於該部分的URL中,則可以編寫一個小巧的模塊,該模塊使用hook_init基本上說出當前用戶的角色是否不是這些指定角色之一,以及url包含“ / managers /”,然后包含drupal_goto()登錄頁面。

您也可以使用“規則”模塊輕松完成此操作,盡管如果這是您唯一要使用“規則”的功能,那不值得。

還有很多按節點訪問的模塊(例如所有事物的節點訪問),但是這些模塊也可能需要更多的精力,值得完成這樣一個簡單的任務。

如果我做對了,您要實現的目標是僅使某些角色能夠訪問位於給定URL的頁面。

通過使用貢獻訪問模塊

正如mcrittenden已經提到的那樣,有很多模塊可以讓您調整內容訪問。 其中, 內容訪問肯定可以滿足您的要求,因為它允許您分別設置每個節點的權限。

通過使用標志+視圖

另一種無需編碼的實現方式是結合使用flag模塊views模塊 以下是我的工作方式的簡要概述:

  1. 創建三個標記,您可以使用這些標記來標記必須在問題中指定的任何地址處查看的內容(任何類型的內容!)(例如:創建一個標記“簡介”,以用於標記)必須在頁面“ / mangers / intro”上顯示的節點)
  2. 創建3個視圖(對於您在問題中列出的每個地址一個視圖),這些視圖將通過根據標記對節點進行過濾來從數據庫中拉出所需的節點。
  3. 根據角色設置這些視圖的權限。

通過編寫一個可以檢查URI並阻止未授權用戶的模塊

您肯定可以做到這一點。 主要優點是就CPU和內存負載而言,這將是一個非常輕量級的解決方案,但是您需要注意一些陷阱。 例如,您始終可以通過http://example.com/node/nodenumber格式的URL訪問內容,因此您還必須檢查URL的別名。 還有一個事實,就是用戶可能會在URL后面附加一個虛假的東西 ,並且您必須編寫正則表達式來考慮這種情況。

(也由mcrittenden給出的規則模塊的想法是一個好主意,但是我只有在閱讀他的回答時才想到它時沒有提到它)。

希望這可以幫助!

您還可以研究Menu Access ,它使您可以將角色和菜單之間或角色和菜單樹之間的訪問相關聯。 (請記住,在Drupal中,“菜單路由器”表神秘地不僅是UI,而且是將每個內容都連接到URL的流量路由器。)

因為所有項目都與菜單項相關聯,所以您不必擔心路徑別名不一定是通用的。 您還可以使用“ 菜單塊”之類的模塊來模仿書籍導航。

盡管該模塊處於完整和推薦狀態,但它似乎更接近Alpha或Beta版本,因此在生產現場要小心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM