/** * Find page's ancestors (templates and parents) and flatted all their roles. * * @param View $view * * @return array */ private function getPageRoles(View $view) { $insertAncestorRole = function (View $view = null) use(&$insertAncestorRole) { if ($view === null) { return; } $roles = $view->getRoles(); if ($templateRoles = $insertAncestorRole($view->getTemplate(), $roles)) { $roles .= ($roles ? ',' : '') . $templateRoles; } if ($parentRoles = $insertAncestorRole($view->getParent(), $roles)) { $roles .= ($roles ? ',' : '') . $parentRoles; } return $roles; }; $roles = $insertAncestorRole($view); if ($roles) { return array_unique(explode(',', $roles)); } }