2014-03-14 38 views
0

我正在研究一個Drupal項目,需要很少分層的用戶角色。高級用戶將具有一定的管理角色,但也會有兩個低級角色 - 銷售人員和標準客戶。銷售人員角色需要能夠創建標準客戶,然後查看與他們創建的任何客戶相關的數據。Drupal 7 - 菜單項顯示取決於角色和視圖

由於我使用PROFILE2,典型的用戶帳戶的任務菜單看起來像這樣

http://oi57.tinypic.com/333v447.jpg

現在,當登錄用戶是銷售人員的角色和他們去「我的帳戶」他們不應該看到我的訂閱,訂單或發票。供應商詳細信息profile2鏈接也應禁用。但是,因爲他們可以查看自己添加到系統中的客戶數據,這些鏈接有,如果他們查看其他用戶的屏幕

在代碼方面出現,我打個開始

function mymodules_menu_alter(&$menu) { 
    global $user; 

    $viewed_user_id = null; 
    $uid = arg(1); 
    if (arg(0) == 'user' && is_numeric($uid)) { 
    $viewed_user_id = $uid; 
    } 

    if (in_array('sales executive', $user->roles) && $viewed_user_id == $user->uid) {  
    unset($menu['user/%user_category/edit/vendor_details']); 
    } 

    if (in_array('sales executive', $user->roles)) {  
    unset($menu['user/%user/user-recurring-entities']); 
    } 
} 

問題以下想法首先檢查vendor_details的行爲有點奇怪。它顯示所有角色的菜單,或者沒有。我在想緩存可能會影響到這一點?

第二個檢查根本不起作用,因爲這樣的菜單條目不存在於$ menu數組中。

所以我的基本問題是,如何使整個事情工作?也許我的做法是錯誤的?

回答

0

這絕對是一個有趣的方法。

Drupal菜單擁有權限檢查內置,理論上,如果您沒有權限訪問某個頁面,菜單鏈接將不會出現。這是默認行爲。

Ex。讓我們以「訂單」爲例,如果訂單頁面是使用視圖構建的,則可以編輯視圖,並將視圖權限設置爲針對特定角色或Drupal權限。

當然,你可能會使用各種方式來組裝你的頁面,例如。視圖是一個,面板是另一個,或者只是普通的hook_menu。但或多或少,你應該直接使用權限訪問而不是菜單。有時你需要編寫自己的權限版本,這是你在代碼中所做的。