2009-08-24 112 views
0

爲了確保我的網站安全並且所有權限都設置正確,我正在尋找一種方法來生成特定用戶有權訪問的每個頁面的列表。 (所以...每個菜單回調user_access()返回給定的uid TRUE)。Drupal訪問控制列表

東西是這樣的:

$用戶> UID == 0

首頁

照片

聯繫我們

$用戶> uid = 23

首頁

照片

聯繫我們

論壇

博客

回答

0

這是不是真的可行在Drupal,因爲有一個從系統角度看,沒有真正的頁面,只有帶參數的回調函數。爲了澄清,標準路徑的思考節點頁:

node/[nid] 

這將接受[NID],爲node/%路徑的任意整數,則回調函數將嘗試找到匹配的ID的節點 - 它之後只有尋找Drupal'知道'這個頁面是否真的存在。

這同樣適用於所有其他路徑正確,所以基本上你正在尋找一個(幾乎)無限數量的潛在頁,沒有辦法知道,短的測試路徑,如果他們是「存在」或在404結束。

可能做的是看看menu_router表。你會發現所有註冊的路徑,以及它們的回調函數和access_callback函數。對於那些你可以做每個用戶的檢查,但結果很難解釋,因爲路徑很多,並且會包含很多佔位符。

如果您使用URL-Aliases/pathauto,則存在類似的選項。然後你可以拿到url_alias表格,並檢查那裏的所有條目。但是,既然你對保護你的網站感興趣,這將不會有什麼幫助,因爲你會錯過任何沒有別名的路徑 - 如上所述,這些路徑是無數的。

+0

好的。如果我只想要一個可訪問節點的列表呢? – 2009-08-25 17:25:08

+0

檢查'node_access()'函數。您可以遍歷所有節點,並檢查node_access($ op,$ node,$ account)''的結果,以查看$ op(view,update,create,delete)重新感興趣。當然可行,但仍然相當一些處理,給予足夠的節點和用戶... – 2009-08-25 19:19:26