Index: tests/Zend/Acl/AclTest.php =================================================================== --- tests/Zend/Acl/AclTest.php (revision 18232) +++ tests/Zend/Acl/AclTest.php (working copy) @@ -1197,7 +1197,29 @@ } return new Zend_Acl_UseCase1_Acl(); } - + + /** + * Confirm that deleting a role after allowing access to all roles + * raise undefined index error + * + * @group ZF-5700 + */ + public function testRemovingRoleAfterItWasAllowedAccessToAllResourcesGivesError() + { + $acl = new Zend_Acl(); + $acl->addRole(new Zend_Acl_Role('test0')); + $acl->addRole(new Zend_Acl_Role('test1')); + $acl->addRole(new Zend_Acl_Role('test2')); + $acl->addResource(new Zend_Acl_Resource('Test')); + + $acl->allow(null,'Test','xxx'); + + // error test + $acl->removeRole('test0'); + + // Check after fix + $this->assertFalse($acl->hasRole('test0')); + } } Index: library/Zend/Acl.php =================================================================== --- library/Zend/Acl.php (revision 18232) +++ library/Zend/Acl.php (working copy) @@ -218,9 +218,11 @@ } } foreach ($this->_rules['byResourceId'] as $resourceIdCurrent => $visitor) { - foreach ($visitor['byRoleId'] as $roleIdCurrent => $rules) { - if ($roleId === $roleIdCurrent) { - unset($this->_rules['byResourceId'][$resourceIdCurrent]['byRoleId'][$roleIdCurrent]); + if (array_key_exists('byRoleId', $visitor)) { + foreach ($visitor['byRoleId'] as $roleIdCurrent => $rules) { + if ($roleId === $roleIdCurrent) { + unset($this->_rules['byResourceId'][$resourceIdCurrent]['byRoleId'][$roleIdCurrent]); + } } } }