2012-05-08 24 views
2

我目前正在使用Drupal 7,並且正在編寫自定義代碼,以便具有特定權限的用戶(「使用業務儀表板」)應該在主菜單中看到一個菜單項。問題是隻有我(管理員)可以看到這個菜單項。我已經能夠在權限頁面上創建一個自定義權限,並設置它爲「admin」和我的用戶特定角色提供訪問權限,並實現了以下代碼(從不知道位於模塊名稱中的「xxxxxx」我寧願保持匿名的了,但只知道他們都在發生的機讀模塊名稱):Drupal - 通過自定義權限切換菜單項目的可見性

function xxxxxx_menu(){ 
$items = array(); 

$items['xxxxxxx'] = array(
    'title' => 'Business Owner Dashboard', 
    'page callback' => '_xxxxxx_page', 
    'access arguments' => array('use business dashboard'), 
    'type' => MENU_NORMAL_ITEM, 
); 
return $items; 
} 

function xxxxxx_permission(){ 
    return array(
      'use business dashboard' => array(
      'title' => t('Have access to business dashboard'), 
      'description' => t('Allow user to send out SMS messages via   database query forms'), 
     ), 
    ); 
} 

當我登錄爲具有的特定角色的權限在我的測試用戶「使用業務儀表板」我看不到菜單項。我確信這非常簡單,但我一直在Google上搜索,並在代碼上打了幾個小時。任何幫助將不勝感激!

回答

3

無法解決這個問題。你可以嘗試分解訪問回調,如果它不起作用,至少它會給你一個關於正在發生的事情的提示。

您的代碼可以是這樣的:

function xxxxxx_menu(){ 
$items = array(); 

$items['xxxxxxx'] = array(
    'title' => 'Business Owner Dashboard', 
    'page callback' => '_xxxxxx_page', 
    'access callback' => 'my_custom_access_callback', 
    'type' => MENU_NORMAL_ITEM, 
); 
return $items; 
} 

function my_custom_access_callback() 
{ 
    if(user_access('use business dashboard')) 
     return TRUE; 

    return FALSE; 
} 

直到我,如果這個工程...穆罕默德。

+2

奇怪的是,我所要做的只是將權限機器可讀的名稱更改爲「use_business_dashboard」並清除緩存並且它工作正常! – Eric

+0

選擇一個答案! – emc