[英]Drupal menu permissions question
我正在為我的客戶端創建一個管理模塊,使他們可以訪問有關其內容的某些管理功能。 我首先通過實現hook_perm
在模塊中添加一些權限:
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
我只希望看到Administer和Projects項目,而不希望其他項目。 當我單擊“內容管理”時,我得到一個內容管理標題頁面,沒有小節。 站點建設,站點配置和用戶管理相同。 真正奇怪的是沒有顯示“報告”,這也是“管理”的頂層。
為什么未顯示“我的項目”部分中的這些其他項目?如果我未以管理員身份登錄,又如何使它們停止顯示?
您的問題是允許他們查看這些頁面。
在系統模塊的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
可以將那些菜單項的訪問設置更改為他們無權訪問的菜單。 制作自己的燙發或使用現有的燙發。 我不確定為什么菜單路由器會顯示這些。 但我也許可以幫忙...
為什么不將路徑更改為以下內容:
projects/add
projects/%/edit
這類似於節點模塊的菜單掛鈎。 可能不是您要找的東西,但是如果您不希望這些用戶訪問管理資料,則可能是正確的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.