@hollanditkzn

Как не показывать определенным пользователям меню?

у меня есть роли в rbac, мне нужно, чтобы на главной странице при попадание определенной роли отображались определенные меню. Если не использовать виджет Nav, то знаю как это реализовать, но там много кода получается
<?php if (!Yii::$app->user->isGuest && Yii::$app->authManager->getRolesByUser(Yii::$app->user->getId())['admin']->name == 'admin') { ?>
            <li>
                <a href="index.php?r=tovar%2Findex">
                    <span>Товар</span>
                </a>
            </li>
            <?php } ?>

Но не получается переписать также к виджету, даже определить гость это или нет
echo Nav::widget([
        'options' => ['class' => 'nav nav-pills'],
        'items' => [
        ['label' => 'Главная', 'url' => ['zakaz/index']],
        Yii::$app->user->isGuest?
        ['label' => 'Администратор', 'url' => ['zakaz/admin']]:
        false,
        ['label' => 'Дизайнер', 'url' => ['zakaz/disain']],
        ['label' => 'Мастер', 'url' => ['zakaz/master']],
        ['label' => 'Магазин', 'url' => ['zakaz/shop']],
        ],
    ]);

Выходит вот такая ошибка The 'label' option is required.
  • Вопрос задан
  • 408 просмотров
Решения вопроса 1
qonand
@qonand
Software Engineer
еще можно использовать свойство visible у каждого item-а, например:
echo Nav::widget([
    'options' => [
        'class' => 'nav nav-pills'
    ],
    'items' => [
        [
            'label' => 'Главная',
            'url' => [
                'zakaz/index'
            ]
        ],
        [
            'label' => 'Администратор',
            'url' => [
                'zakaz/admin'
            ],
            'visible' => ! Yii::$app->user->isGuest // отображаем для НЕ ГОСТЯ
        ],
        
        [
            'label' => 'Дизайнер',
            'url' => [
                'zakaz/disain'
            ],
            'visible' => Yii::$app->user->can("seeMenu") // отображает для юзера у которого есть разрешение seeMenu
        ],
        [
            'label' => 'Мастер',
            'url' => [
                'zakaz/master'
            ]
        ],
        [
            'label' => 'Магазин',
            'url' => [
                'zakaz/shop'
            ]
        ]
    ]
]);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Надо в rbac сделать правило, например "seeMenu", добавить правило для нужных ролей и далее просто:
$items = [];
$items[] = ['label' => 'Главная', 'url' => ['zakaz/index']];
$items[] = ['label' => 'Дизайнер', 'url' => ['zakaz/disain']];
if(Yii::$app->user->can("seeMenu"))
{
$items[] = ['label' => 'Администратор', 'url' => ['zakaz/admin']];
}
echo Nav::widget([
        'options' => ['class' => 'nav nav-pills'],
        'items' => $items
    ]);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы