如果這是你真正使用的代碼,然後訪問回調函數是錯誤的,因爲它應該返回TRUE
在當前登錄的用戶可以訪問菜單,FALSE
當用戶不能訪問到菜單。它不使用die()
。
這是在文檔中有什麼報道hook_menu():
「訪問回調」:函數返回TRUE
如果用戶有權訪問該菜單項,並FALSE
如果不是。它也可以是布爾常量而不是函數,也可以使用數值(將轉換爲布爾值)。除非值從父菜單項繼承,否則缺省爲user_access();只有MENU_DEFAULT_LOCAL_TASK項可以繼承訪問回調。要使用user_access()
默認回調,您必須指定檢查爲「訪問參數」的權限。
如果您沒有顯示您正在使用的代碼,那麼下面的內容可以解釋您所看到的行爲。
第一個用戶或用戶#1是特定用戶,因爲user_access()總是爲該用戶返回TRUE
。 這是該函數的代碼,其中明確檢查用戶ID明顯等於1
// User #1 has all privileges:
if ($account->uid == 1) {
return TRUE;
}
如果接入回調返回FALSE
爲authenthicated用戶,並且它是使用user_access()
,這是因爲該驗證用戶沒有權限傳遞給該函數。
也可能是您正在檢查多個權限,並且您使用的是user_access('first permission') && user_access('second permission')
而不是user_access('first permission') || user_access('second permission')
(反之亦然)。對於沒有任何區別的用戶#1,作爲user_access('first permission') && user_access('second permission')
和user_access('first permission') || user_access('second permission')
的結果始終是TRUE
,即使您向該函數傳遞了未從任何模塊定義的權限的字符串。
對已登錄用戶和匿名用戶的雙重檢查權限也許他們無權訪問「node/add/page」 –
我對匿名和經過身份驗證的用戶設置了「訪問內容」權限。我無法想象其他任何需要設置的東西。 ??? – sisko
@sisko:我只是想自己試試你的代碼,因爲我懷疑它會起作用,並且還有其他的力量(即某種節點訪問模塊)在這裏引發了這個問題。 – Clive