Role resource tree not displaying in magento2
After long research, I am able to resolve this problem. A mistake was in the format of XML .
Initial code :
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Acl/etc/acl.xsd">
<acl>
<resources>
<resource id="Magento_Adminhtml::admin">
<resource id="Company_Module::" title="test" sortOrder="100"/>
<!--AddMenuAcl-->
</resource>
</resources>
</acl>
</config>
Replace with :
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd">
<acl>
<resources>
<resource id="Magento_Backend::admin">
<resource id="Company_module::test" title="test module" sortOrder="100"/>
<!--AddMenuAcl-->
</resource>
</resources>
</acl>
</config>
Check for this also:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd">
<acl>
<resources>
<resource id="Magento_Adminhtml::admin">
</resource>
</resources>
</acl>
If no resource is defined please comment:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd">
<acl>
<resources>
<!--<resource id="Magento_Adminhtml::admin">
</resource>-->
</resources>
</acl>
I confirm what Manish reported. The problem sits in the acl.xml file. In my case (Magento 2.1) I had the following acl.xml:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd">
<acl>
<resources>
<resource id="Magento_Backend::all_elements" title="Ves ALl">
<resource id="Ves_All::ves_all" title="Ves All" sortOrder="10">
</resource>
</resource>
<resource id="Magento_Backend::admin">
<resource id="Magento_Backend::stores">
<resource id="Magento_Backend::stores_settings">
<resource id="Magento_Config::config">
<resource id="Ves_All::config" title="Ves All - Config Settings" />
</resource>
</resource>
</resource>
</resource>
</resources>
</acl>
I have removed the 1st resource like this:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd">
<acl>
<resources>
<!-- <resource id="Magento_Backend::all_elements" title="Ves ALl">
<resource id="Ves_All::ves_all" title="Ves All" sortOrder="10">
</resource>
</resource> -->
<resource id="Magento_Backend::admin">
<resource id="Magento_Backend::stores">
<resource id="Magento_Backend::stores_settings">
<resource id="Magento_Config::config">
<resource id="Ves_All::config" title="Ves All - Config Settings" />
</resource>
</resource>
</resource>
</resource>
</resources>
</acl>
and magically in the admin side the resource tree appears again (after flushing the cache)!
This is temporary solution worked for me. D:\xampp\htdocs\Project\vendor\magento\module-user\Block\Role\Tab\Edit.php
<?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\User\Block\Role\Tab;
use Magento\Framework\App\ObjectManager;
use Magento\User\Controller\Adminhtml\User\Role\SaveRole;
/**
* Rolesedit Tab Display Block.
*
*/
class Edit extends \Magento\Backend\Block\Widget\Form implements \Magento\Backend\Block\Widget\Tab\TabInterface
{
/**
* @var string
*/
protected $_template = 'role/edit.phtml';
/**
* Root ACL Resource
*
* @var \Magento\Framework\Acl\RootResource
*/
protected $_rootResource;
/**
* Rules collection factory
*
* @var \Magento\Authorization\Model\ResourceModel\Rules\CollectionFactory
*/
protected $_rulesCollectionFactory;
/**
* Acl builder
*
* @var \Magento\Authorization\Model\Acl\AclRetriever
*/
protected $_aclRetriever;
/**
* Acl resource provider
*
* @var \Magento\Framework\Acl\AclResource\ProviderInterface
*/
protected $_aclResourceProvider;
/** @var \Magento\Integration\Helper\Data */
protected $_integrationData;
/**
* Core registry
*
* @var \Magento\Framework\Registry
*/
protected $coreRegistry = null;
/**
* @param \Magento\Backend\Block\Template\Context $context
* @param \Magento\Framework\Acl\RootResource $rootResource
* @param \Magento\Authorization\Model\ResourceModel\Rules\CollectionFactory $rulesCollectionFactory
* @param \Magento\Authorization\Model\Acl\AclRetriever $aclRetriever
* @param \Magento\Framework\Acl\AclResource\ProviderInterface $aclResourceProvider
* @param \Magento\Integration\Helper\Data $integrationData
* @param array $data
*/
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Authorization\Model\Acl\AclRetriever $aclRetriever,
\Magento\Framework\Acl\RootResource $rootResource,
\Magento\Authorization\Model\ResourceModel\Rules\CollectionFactory $rulesCollectionFactory,
\Magento\Framework\Acl\AclResource\ProviderInterface $aclResourceProvider,
\Magento\Integration\Helper\Data $integrationData,
array $data = []
) {
$this->_aclRetriever = $aclRetriever;
$this->_rootResource = $rootResource;
$this->_rulesCollectionFactory = $rulesCollectionFactory;
$this->_aclResourceProvider = $aclResourceProvider;
$this->_integrationData = $integrationData;
parent::__construct($context, $data);
}
/**
* Set core registry
*
* @param \Magento\Framework\Registry $coreRegistry
* @return void
* @deprecated
*/
public function setCoreRegistry(\Magento\Framework\Registry $coreRegistry)
{
$this->coreRegistry = $coreRegistry;
}
/**
* Get core registry
*
* @return \Magento\Framework\Registry
* @deprecated
*/
public function getCoreRegistry()
{
if (!($this->coreRegistry instanceof \Magento\Framework\Registry)) {
return \Magento\Framework\App\ObjectManager::getInstance()->get('Magento\Framework\Registry');
} else {
return $this->coreRegistry;
}
}
/**
* Get tab label
*
* @return \Magento\Framework\Phrase
*/
public function getTabLabel()
{
return __('Role Resources');
}
/**
* Get tab title
*
* @return string
*/
public function getTabTitle()
{
return $this->getTabLabel();
}
/**
* Whether tab is available
*
* @return bool
*/
public function canShowTab()
{
return true;
}
/**
* Whether tab is visible
*
* @return bool
*/
public function isHidden()
{
return false;
}
/**
* Check if everything is allowed
*
* @return bool
*/
public function isEverythingAllowed()
{
$selectedResources = $this->getSelectedResources();
$id = $this->_rootResource->getId();
return in_array($id, $selectedResources);
}
/**
* Get selected resources
*
* @return array|mixed|\string[]
*/
public function getSelectedResources()
{
$selectedResources = $this->getData('selected_resources');
if (empty($selectedResources)) {
$allResource = $this->getCoreRegistry()->registry(SaveRole::RESOURCE_ALL_FORM_DATA_SESSION_KEY);
if ($allResource) {
$selectedResources = [$this->_rootResource->getId()];
} else {
$selectedResources = $this->getCoreRegistry()->registry(SaveRole::RESOURCE_FORM_DATA_SESSION_KEY);
}
if (null === $selectedResources) {
$rid = $this->_request->getParam('rid', false);
$selectedResources = $this->_aclRetriever->getAllowedResourcesByRole($rid);
}
$this->setData('selected_resources', $selectedResources);
}
//var_dump($selectedResources); die();
return $selectedResources;
}
/**
* Get Json Representation of Resource Tree
*
* @return array
*/
public function getTree()
{
$resources = $this->_aclResourceProvider->getAclResources();
$rootArray = $this->_integrationData->mapResources(
//isset($resources[1]['children']) ? $resources[1]['children'] : []; //comment this line
isset($resources[2]['children']) ? $resources[2]['children'] : []
); //use this line
return $rootArray;
}
}
Please refer last method with comment.