2011-10-10 11 views
7

मैं एक विशिष्ट उपयोगकर्ता भूमिका के लिए adminmenu से मेनू आइटम को हटाना चाहता हूं। मैंने दूसरों को डमी ओवरराइड बनाकर ऐसा किया है लेकिन ये भूमिकाओं पर आधारित नहीं हैं। मैं इसे .xml फ़ाइलों में से किसी एक का उपयोग किए बिना करना चाहता हूं। क्या ऐसा करने का कोई तरीका है, उदाहरण के लिए; __construct() या readyLayout?Magento Admin :: विशिष्ट भूमिकाओं/उपयोगकर्ताओं के लिए मेनू आइटम निकालें

संपादित करें: मुझे यह जोड़ना होगा कि जिस हिस्से को मैं अक्षम करना चाहता हूं वह है सीएमएस में प्रबंधित पदानुक्रम आइटम। मुझे पता है कि मैं सिर्फ userrole के लिए पदानुक्रम को अक्षम कर सकता हूं लेकिन मुझे इसे सीएमएस पृष्ठों को सहेजने की आवश्यकता है।

+0

ठीक है, इसलिए मैंने इसे स्वयं ठीक करने में कामयाब रहा। मैंने समाधान साझा करने के लिए अपने स्थानीय Xxxxx_Xxxx_Block_Adminhtml_Page_Menu – Chris

+0

+1 के भीतर Mage_Adminhtml_Block_Page_Menu बढ़ाया :) – JNDPNT

+0

कृपया जितनी जल्दी हो सके उत्तर के रूप में अपना समाधान सबमिट करें। – cwallenpoole

उत्तर

1

मैं अपने स्वयं के ब्लॉक के साथ Mage_Adminhtml_Block_Page_Menu का विस्तार करता हूं। मैंने फ़ंक्शन की प्रतिलिपि बनाई है "_buildMenuArray()" और मेनू सरणी वापस करने से ठीक पहले मैं जांचता हूं कि उपयोगकर्ता में वर्तमान लॉगजेन व्यवस्थापक नहीं है या नहीं। यदि ऐसा है तो; मैं मेनू से पदानुक्रम वस्तु को हटाता हूं और पृष्ठ वस्तु को मूल्य के साथ सेट करता हूं ताकि ड्रॉप-छाया ठीक से प्रदर्शित हो।

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

ऐसा करने का सही तरीका भूमिका के लिए एसीएल अनुमतियों को संपादित करना है। यह Magento व्यवस्थापक में एक विशेषता है और कस्टम मॉड्यूल की कोई आवश्यकता नहीं है।

आप सिस्टम पर जाते हैं: अनुमतियां: भूमिकाएं। फिर आप वह भूमिका चुनते हैं जिसे आप मेनू आइटम को हटाना चाहते हैं। रोल संसाधन टैब में, आप उस मेनू आइटम का चयन करते हैं जिसे आप उस भूमिका के व्यवस्थापक में दिखाना चाहते हैं। अपने कैश को सेव करें और साफ़ करें पर क्लिक करें और आपको अच्छा होना चाहिए।

+0

जैसा कि मैंने वर्णन में कहा था। सीएमएस पृष्ठों को बचाने के लिए भूमिका 'पदानुक्रम' को सक्रिय किया जाना चाहिए। अगर मैंने इसे बंद कर दिया है, तो सीएमएस पेज पदानुक्रम की जानकारी के बिना सहेजा जाता है। और जब आप भूमिका मेनू में एक भूमिका (पदानुक्रम) सक्रिय करते हैं। उस भूमिका के लिए मेनू आइटम (पदानुक्रम) स्वचालित रूप से मेनू बार में जोड़ा गया है। – Chris

संबंधित मुद्दे