/** * Populate ACL with roles from external storage * * @param \Magento\Framework\Acl $acl * @return void */ public function populateAcl(\Magento\Framework\Acl $acl) { $roleTableName = $this->_resource->getTableName('authorization_role'); $adapter = $this->_resource->getConnection('core_read'); $select = $adapter->select()->from($roleTableName)->order('tree_level'); foreach ($adapter->fetchAll($select) as $role) { $parent = $role['parent_id'] > 0 ? $role['parent_id'] : null; switch ($role['role_type']) { case RoleGroup::ROLE_TYPE: $acl->addRole($this->_groupFactory->create(['roleId' => $role['role_id']]), $parent); break; case RoleUser::ROLE_TYPE: if (!$acl->hasRole($role['role_id'])) { $acl->addRole($this->_roleFactory->create(['roleId' => $role['role_id']]), $parent); } else { $acl->addRoleParent($role['role_id'], $parent); } break; } } }