2011-01-14 78 views
0

我正在建立一個網站,爲每個用戶提供一個私人主頁,其內容可以看到,但其他人不能。在_menu處理程序中的回調允許訪問,如果用戶是頁面的所有者並否則拒絕;一切都很好。Drupal:訪問被拒絕觸發,但我仍然得到內容

我剛剛修改了該頁面,以便其內容由一組框代替一大堆代碼組成。內容聚集在一起,但有一個問題:如果用戶A查看用戶B的私人頁面,他會得到一個拒絕訪問頁面,他應該這樣做。然而,這些塊仍然被調用,並且它們的內容仍然在頁面上結束,使得用戶A可以看到用戶B的私人東西。該頁面也沒有得到通常的「您無權訪問此頁面」。消息通常顯示在「拒絕訪問」頁面上。

我完全理解爲什麼會發生這種情況。我可以通過向他們提供一些設計合理的「在特定頁面上顯示塊」功能來阻止塊運行,但仍有一些情況發生(a)看起來不正確,(b)我不明白。總之,這讓我對網站的訪問控制發生了一些不好/有趣的感覺,尤其是與塊關聯的方式。任何人都可以提供任何見解嗎?謝謝!

回答

0

您應該在鉤子菜單中創建一個訪問回調函數來執行訪問檢查。否則即使您沒有渲染任何東西,用戶也可以看到內容。由於塊不是通過菜單回調創建的,因此它們通常會呈現。

僅供參考,請參閱:hook_menu

+0

這是我在做正是 - 我模塊的_menu處理程序頁面的條目有_access_canEditUserPage的「訪問回調」,這被傳遞用戶的UID(摘自該頁面的URL,並通過'access arguments' - > array(1)傳入)。 _access_canEditUserPage確認用戶被允許查看頁面,並根據情況返回true或false。這(我認爲)是導致訪問被拒絕頁面的原因,這就是爲什麼我對繼續出現的塊內容感到困惑。 FWIW,apache日誌確認頁面請求被403錯誤代碼響應。 – 2011-01-14 19:30:59