Сконфигурируйте 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..? Пожалуйста, обновите ваш код вместе с ним.