2011-10-10 34 views
7

Tôi muốn xóa mục menu khỏi adminmenu cho vai trò người dùng cụ thể. Tôi đã thấy những người khác làm điều đó bằng cách tạo ra một ghi đè giả, nhưng chúng không dựa trên vai trò. Tôi muốn làm điều này mà không cần sử dụng một trong các tệp .xml. Có cách nào để làm điều này trong, ví dụ; __construct() hoặc PrepareLayout?Magento Admin :: Xóa mục Menu cho Vai trò/Người dùng cụ thể

EDIT: Tôi phải thêm vào phần này mà phần tôi muốn tắt là mục Quản lý cấp bậc trong CMS. Tôi biết tôi có thể vô hiệu hóa Phân cấp cho userrole nhưng tôi cần nó để lưu các trang CMS.

+0

OK, vì vậy, tôi đã tự khắc phục sự cố này. Tôi đã mở rộng Mage_Adminhtml_Block_Page_Menu trong Xxxxx_Xxxx_Block_Adminhtml_Page_Menu – Chris

+0

+1 địa phương của mình để chia sẻ giải pháp :) – JNDPNT

+0

Vui lòng gửi giải pháp của bạn làm câu trả lời sớm nhất có thể. – cwallenpoole

Trả lời

1

Tôi mở rộng Mage_Adminhtml_Block_Page_Menu bằng khối của riêng mình. Tôi đã sao chép hàm "_buildMenuArray()" Và ngay trước khi tôi trả về mảng menu, tôi kiểm tra xem loggen hiện tại trong người dùng có phải là quản trị viên không. Nếu vậy; Tôi loại bỏ các mục phân cấp từ trình đơn và thiết lập mục Page với giá trị cuối cùng để thả bóng được hiển thị đúng.

class Xxxxx_Xxxx_Block_Adminhtml_Page_Menu extends Mage_Adminhtml_Block_Page_Menu 
{ 
    protected function _buildMenuArray(Varien_Simplexml_Element $parent=null, $path='', $level=0) 
    { 
     if (is_null($parent)) { 
      $parent = Mage::getSingleton('admin/config')->getAdminhtmlConfig()->getNode('menu'); 
     } 

     $parentArr = array(); 
     $sortOrder = 0; 
     foreach ($parent->children() as $childName => $child) { 
      if (1 == $child->disabled) { 
       continue; 
      } 

      $aclResource = 'admin/' . ($child->resource ? (string)$child->resource : $path . $childName); 
      if (!$this->_checkAcl($aclResource)) { 
       continue; 
      } 

      if ($child->depends && !$this->_checkDepends($child->depends)) { 
       continue; 
      } 

      $menuArr = array(); 

      $menuArr['label'] = $this->_getHelperValue($child); 

      $menuArr['sort_order'] = $child->sort_order ? (int)$child->sort_order : $sortOrder; 

      if ($child->action) { 
       $menuArr['url'] = $this->_url->getUrl((string)$child->action, array('_cache_secret_key' => true)); 
      } else { 
       $menuArr['url'] = '#'; 
       $menuArr['click'] = 'return false'; 
      } 

      $menuArr['active'] = ($this->getActive()==$path.$childName) 
       || (strpos($this->getActive(), $path.$childName.'/')===0); 

      $menuArr['level'] = $level; 

      if ($child->children) { 
       $menuArr['children'] = $this->_buildMenuArray($child->children, $path.$childName.'/', $level+1); 
      } 
      $parentArr[$childName] = $menuArr; 

      $sortOrder++; 
     } 

     uasort($parentArr, array($this, '_sortMenu')); 

     while (list($key, $value) = each($parentArr)) { 
      $last = $key; 
     } 
     if (isset($last)) { 
      $parentArr[$last]['last'] = true; 
     } 

     $data = $this->_isAdmin($parentArr); 

     return $data; 
    } 

    protected function _isAdmin($data){ 
     $userRole = Mage::getSingleton('admin/session')->getUser()->getRole(); 
     $roleName = $userRole->getRoleName(); 
     $roleId = $userRole->getRoleId(); 
     if ($roleName == 'Administrators' || $roleId == 1) { 
      return $data; 
     } else { 
      if (isset($data['hierarchy'])){ 
       unset($data['hierarchy']); 
       $data['page']['last'] = 1; 
      } 
      if (isset($data['enterprise_page']['children']['hierarchy'])){ 
       unset($data['enterprise_page']['children']['hierarchy']); 
       $data['enterprise_page']['children']['last'] = 1; 
      } 
      return $data; 
     } 
    } 
} 
0

Cách chính xác để thực hiện việc này là chỉnh sửa quyền ACL cho vai trò. Đây là một tính năng trong quản trị Magento và không cần mô-đun tùy chỉnh.

Bạn chuyển đến Hệ thống: Quyền: Vai trò. Sau đó, bạn chọn vai trò mà bạn muốn loại bỏ các mục trình đơn từ. Trong tab Vai trò tài nguyên, bạn chọn các mục menu bạn muốn hiển thị trong quản trị viên của vai trò đó. Nhấp vào lưu và xóa bộ nhớ cache của bạn và bạn sẽ tốt.

+0

Như tôi đã nói trong phần mô tả. Vai trò 'phân cấp' phải được kích hoạt để lưu các trang CMS. Nếu tôi tắt nó, các trang CMS sẽ được lưu mà không có thông tin phân cấp. Và khi bạn kích hoạt một vai trò (thứ bậc) trong menu Vai trò. Mục menu cho vai trò đó (thứ bậc) được tự động thêm vào thanh trình đơn. – Chris

Các vấn đề liên quan