Сконфигурируйте navbar для отображения разных кнопок, когда разные пользователи входят в систему Laravel 5.2

Я просто хотел спросить это: я делаю заголовок, в котором я проверяю, имеет ли пользователь, который вошел в систему, роль администратора или пользователя. Если он является администратором, на нем должно отображаться Администрирование (название кнопки). Если он пользователь, он должен показывать имя пользователя (имя кнопки) с 2 выпадающими ссылками, профиль и выход из системы.

Пока я сделал это:

<li class="dropdown">
    @if ((Auth::check() && (Auth::user()->roles()->id=1)) //Administration area
        <a href="{{ route('admin.dashboard') }}" role="button" aria-haspopup="true" aria-expanded="false" ><i class="fa fa-user fa-2x" aria-hidden="true"></i> Administration</a>
    @elseif(Auth::check() && (Auth::user()->roles()->id=3)) //Simple user area
        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" ><i class="fa fa-user fa-2x" aria-hidden="true"></i> {{ Auth::user()->username }} <span class="caret"></span></a>
    <ul class="dropdown-menu">
        <li><a href="{{ route('user.profile') }}">User Profile</a></li>
        <li><a href="{{ route('user.logout') }}">Log out</a></li>
    </ul>
    @else
        @include('user.login') //login area
    @endif
</li>

Когда ни один пользователь не вошел в систему, отображается кнопка входа в систему.

Когда пользователь вошел в систему, например, Пользователь, он показывает мне кнопку "Администратор", 1-е "Если". Но это не так.

Кажется, он не выходит из If и не может понять почему.

Я должен сказать, что я доступ roles стол с помощью сводной таблицы user_role вот почему я использую user()->roles()->id, Когда у меня были роли внутри users стол, это работало. У кого-нибудь есть идеи? Все будет оценено!

2 ответа

Решение

Если связь между User а также Role один к одному, это будет работать:

@if (Auth::check() && Auth::user()->roles->id == 1)

Итак, вы должны использовать == вместо =,

== сравнить значение, если оно равно. = присвоить значение переменной.

ОБНОВЛЕНИЕ Вы сказали, что используете здесь многие ко многим. В этом случае вы должны использовать готовую загрузку, чтобы загрузить roles() Отнести и передать эти данные в представление:

$userWithRoles = auth()->user()->load('roles');

Тогда вы должны использовать contains() способ проверить, есть ли у пользователя роль, которую вы ищете:

@if (Auth::check() && Auth::user()->roles->contains(1))

Вы допустили ошибку, чтобы использовать оператор присвоения = вместо сравнения ==, Попробуйте код ниже:

@if (Auth::guest())
    @include('user.login') //login area
@else
    @if(access()->user()->roles[0]->id == 1)
        //Administration area
    @elseif(access()->user()->roles[0]->id == 3)
        //Simple user area
    @endif
@endif

ПРИМЕЧАНИЕ. А как насчет других пользователей, имеющих роль с идентификатором 2 ИЛИ 4..? Пожалуйста, обновите ваш код вместе с ним.

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