2010-04-08 143 views
0

我正在爲我的客戶端創建一個管理模塊,使他們能夠訪問與其內容有關的某些管理功能。我要從頭開始由我的模塊中加入了一些權限,通過實施hook_permDrupal菜單權限問題

function mymodule_perm() 
{ 
    return array(
     'manage projects', 
    ); 
} 

然後我就可以通過向管理部分已經存在的創建我的菜單:

function mymodule_menu() 
{ 
    $items['admin/projects'] = array(
     'title' => 'Projects', 
     'description' => 'Manage your projects.', 
     'page callback' => 'manage_projects_overview', 
     'access callback' => 'user_access', 
     'access arguments' => array('manage projects'), 
     'type' => MENU_NORMAL_ITEM, 
     'weight' => -100, 
    ); 

    $items['admin/projects/add'] = array(
     'title' => 'Add project', 
     'access arguments' => array('manage projects'), 
     'page callback' => 'mymodule_projects_add', 
     'type' => MENU_NORMAL_ITEM, 
     'weight' => 1, 
    ); 

    return $items; 
} 

這將添加一個項目部分到行政區域用添加項目子部分。都好。

我想要的行爲是我的客戶只能看到部分項目在登錄時,我已經通過選中「管理項目」權限在我的模塊的權限部分驗證的用戶做到了這一點。現在爲了讓我的客戶能夠實際訪問管理區域,我還需要在用戶權限部分的「系統模塊」下勾選「訪問管理頁面」。這很好,當我作爲客戶端登錄時,我只能在管理區域看到項目部分。有一兩件事,雖然,在我的導航菜單上的左欄,我可以看到以下項目顯示:

- Administer 
    - Projects 
    - Content management 
    - Site building 
    - Site configuration 
    - User management 

我期待只看到轄和項目的項目,而不是其他的。當我點擊例如內容管理我得到一個沒有小節的標題爲「內容管理」的頁面。網站構建,網站配置和用戶管理也相同。真正奇怪的是報告沒有被顯示,這也是最高級別的管理部分。

爲什麼這些其他項目,除了我的項目部分,正在顯示,我怎麼可以讓他們出現,如果我沒有登錄爲管理員停下來?

回答

2

你的問題是,他們被允許瀏覽這些頁面。

從系統模塊的hook_menu

$items['admin/build'] = array(
    'title' => 'Site building', 
    'description' => 'Control how your site looks and feels.', 
    'position' => 'right', 
    'weight' => -10, 
    'page callback' => 'system_admin_menu_block_page', 
    'access arguments' => array('access administration pages'), 
    'file' => 'system.admin.inc', 
); 

所以,當你給他們access administration pages你在這給了他們訪問網站的建設部分,但不是任何項目。要解決這個問題一個快速的方法是:

  • 使用hook_menu_alter更改訪問設置這些菜單項的東西,他們沒有獲得。要麼讓自己的燙髮或使用現有的燙髮。
  • 你也可以使用你的主題來隱藏項目。
+0

啊。這也解釋了報告部分沒有顯示的原因。它被設置爲「訪問站點報告」訪問權限,而不是「訪問管理頁面」。我想我沿着hook_menu_alter路徑走下去。這似乎是更合適的做法。謝謝! – Luke 2010-04-08 12:45:03

1

我不知道確切原因菜單路由器顯示的。不過,我也許可以幫助...

你爲什麼不更改爲類似的路徑:

projects/add 
projects/%/edit 

這類似於節點模塊的menu掛鉤。它可能不是你正在尋找的東西,但如果你不想讓這些用戶訪問管理員的東西,這可能是正確的方式。