<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Acl\Role;
/**
* Acl role registry. Contains list of roles and their relations.
*/
class Registry extends \Zend_Acl_Role_Registry
{
/**
* Add parent to the $role node
*
* @param \Zend_Acl_Role_Interface|string $role
* @param array|\Zend_Acl_Role_Interface|string $parents
* @return $this
* @throws \Zend_Acl_Role_Registry_Exception
*/
public function addParent($role, $parents)
{
try {
if ($role instanceof \Zend_Acl_Role_Interface) {
$roleId = $role->getRoleId();
} else {
$roleId = $role;
$role = $this->get($role);
}
} catch (\Zend_Acl_Role_Registry_Exception $e) {
throw new \Zend_Acl_Role_Registry_Exception("Child Role id '{$roleId}' does not exist");
}
if (!is_array($parents)) {
$parents = [$parents];
}
foreach ($parents as $parent) {
try {
if ($parent instanceof \Zend_Acl_Role_Interface) {
$roleParentId = $parent->getRoleId();
} else {
$roleParentId = $parent;
}
$roleParent = $this->get($roleParentId);
} catch (\Zend_Acl_Role_Registry_Exception $e) {
throw new \Zend_Acl_Role_Registry_Exception("Parent Role id '{$roleParentId}' does not exist");
}
$this->_roles[$roleId]['parents'][$roleParentId] = $roleParent;
$this->_roles[$roleParentId]['children'][$roleId] = $role;
}
return $this;
}
}
|