From 40191897846769f9bc51dac133e25a810b5e12c2 Mon Sep 17 00:00:00 2001 From: gggeek Date: Sat, 18 May 2019 09:16:34 +0000 Subject: [PATCH] Fix issue #202: RoleManager::createLimitation fails when using array reference --- Core/Executor/RoleManager.php | 16 ++++++++++++---- WHATSNEW.md | 6 ++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/Core/Executor/RoleManager.php b/Core/Executor/RoleManager.php index e7bac8ac..0cf57a6d 100644 --- a/Core/Executor/RoleManager.php +++ b/Core/Executor/RoleManager.php @@ -302,11 +302,19 @@ protected function createLimitation(RoleService $roleService, array $limitation) { $limitationType = $roleService->getLimitationType($limitation['identifier']); - $limitationValue = is_array($limitation['values']) ? $limitation['values'] : array($limitation['values']); - - foreach ($limitationValue as $id => $value) { - $limitationValue[$id] = $this->referenceResolver->resolveReference($value); + // 1st resolve refs (if we got passed a string) + $limitationValue = $this->referenceResolver->resolveReference($limitation['values']); + // then, if we have an array, resolve refs recursively + if (is_array($limitationValue)) { + foreach ($limitationValue as $id => $value) { + $limitationValue[$id] = $this->referenceResolver->resolveReference($value); + } + } else { + // if still a scalar, make sure we can loop over it + $limitationValue = array($limitationValue); } + + $limitationValue = $this->limitationConverter->resolveLimitationValue($limitation['identifier'], $limitationValue); return $limitationType->buildValue($limitationValue); } diff --git a/WHATSNEW.md b/WHATSNEW.md index 59e793f2..36735ad6 100644 --- a/WHATSNEW.md +++ b/WHATSNEW.md @@ -1,3 +1,9 @@ +Version 5.9.4 +============= + +* Fix issue #202: RoleManager::createLimitation fails when using array reference + + Version 5.9.3 =============