2010-09-03 41 views
2

我正在寫這個令人遺憾的希望,有人已經做了類似的事情。我會在drupal.org上發佈 - 但該網站的用戶友好程度與西紅柿的踢球率相同。Drupal - 按角色檢查所有站點路徑的安全

我不瞭解你,但是當我開發時,我將所有Drupal路徑以開放訪問的方式離開,然後考慮在最後使用訪問權限鎖定它們。

什麼是真正有用的是分析所有可用的路徑(由基本解構menu_router表的內容),然後嘗試他們一個模塊(捲曲?)又同時登錄與一個給定用戶給定一組角色。

輸出將是一個簡單的HTML頁面,說明哪些路徑可訪問,哪些不可訪問。

我幾乎不願意這樣做,但如果有人知道任何模糊的事情,我會非常感激地聽到它。

乾杯

UPDATE
在從Yorirou一個偉大的想法,我敲起來一個簡單的模塊,以提供我一直在尋找的輸出。

你可以在這裏代碼:http://github.com/hymanroth/Path-Lockdown

+0

把模塊到Drupal.org :) – tamasd 2010-09-04 21:03:50

+0

我試過了,但他們拒絕給我一個CVS賬戶。 – 2010-09-05 10:54:05

回答

1

我第一次嘗試是這樣的函數:

function check_paths($uid) { 
    global $user; 
    $origuser = $user; 
    $user = user_load($uid); 

    $paths = array(); 
    foreach(array_keys(module_invoke_all('menu')) as $path) { 
    $result = menu_execute_active_handler($path); 
    if($result != MENU_ACCESS_DENIED && $result != MENU_NOT_FOUND) { 
     $paths[$path] = TRUE; 
    } 
    else { 
     $paths[$path] = FALSE; 
    } 
    } 

    $user = $origuser; 

    return $paths; 
} 

這是很好的一個第一次,但它不能(在菜單路徑%)處理通配符路徑。加載所有可能的值可以是一個選項,但它不適用於所有情況。例如,如果你有%node,那麼你可以使用node_load,但是如果你只有%,那麼你不知道要加載什麼。另外,爲了正確處理沒有參數的情況(例如,顯示所有元素),省略最後一個參數(這是一個變量)是一種常見做法。

此外,將此解決方案與Drupal測試系統集成可能是一個好主意。

+0

好主意Yorrou!我用你的代碼作爲模塊的基礎。有關詳細信息,請參閱我的更新回答另外,'%'不是問題,因爲我們只測試訪問路徑,而不是路徑本身是否有效。 – 2010-09-04 16:47:55

1

我做了一些調查,沒能發現任何東西。儘管我傾向於認爲有一種方法可以通過Drupal API而不是CURL來檢查路徑訪問 - 但請保持我最新的進展情況/讓我知道你是否想要幫助開發。這對於Drupal模塊來說是一個很好的補充。

+0

是的,CURL是不必要的。我寫了一個模塊來生成我正在尋找的輸出,查看我的更新答案以獲取詳細信息。 – 2010-09-04 16:46:06