Typo3 Neos: показывать разные пункты меню для пользователей разных уровней доступа

Я создал меню в Neos Backend. Каждый узел меню соответствует плагину управления. Эти действия контроллера определены в policy.yaml как ресурсы с их ролями политики доступа потока. Шаблон для меню определен в root.ts2, который я взял копию из пакета Typo3.NeosDemoTypo3Org.

mainMenu часть root.ts2 является

mainMenu = Menu {
entryLevel = 1
templatePath = 'resource://ABC.Demo/Private/Templates/TypoScriptObjects/MainMenu.html'
maximumLevels = 3
site = ${site}
}

MainMenu.html - это:

<div class="collapse navbar-collapse navbar-main-collapse">
<ul class="nav nav-pills nav-justified">
<f:for each="{items}" as="item" iteration="menuItemIterator">
                    <f:then>
                            <li class="active">
                                <neos:link.node node="{item.node}">{item.label}</neos:link.node>
                            </li>
                        </f:then>
                        <f:else>
                            <li>
                                <neos:link.node node="{item.node}">{item.label}</neos:link.node>
                            </li>
                        </f:else>
                    </f:if>
                </f:for>
        </ul>
     </div>

Если я использую {parts.mainMenu -> f:format.raw()} в Default.html, он печатает все пункты меню, определенные в корне сайта Neos.

Как я могу показать только те пункты меню в главном меню веб-страницы, для которых пользователь имеет доступ к соответствующему ресурсу, определенному в policy.yaml.

Кто-нибудь может дать идею, способ ее достижения.

1 ответ

Решение

Вы должны установить защиту доступа на узле страницы. В настоящее время нет интерфейса для этого, но вы можете определить роли доступа для узлов в базе данных. Смотрите таблицу: поля доступа typo3_typo3cr_domain_model_nodedata. Это должен быть сериализованный массив имен ролей. Это будет правильно отражаться в меню. И не забудьте также установить роль TYPO3.Neos:Editor, иначе редакторы не смогут изменять эти страницы.

Было бы довольно сложно получить плагины с каждой страницы и выполнить проверку доступа к ним, но это, конечно, может быть другой вариант. Я не могу дать вам никаких подсказок, потому что тип узла будет различным для каждой страницы, в зависимости от плагина.

Другие вопросы по тегам