我有导航栏,如果用户登录的是管理员,我想显示指向管理员仪表板的链接。如果没有,它应该什么都不显示。我和客人有类似的东西,例如
@if (Auth::guest())
<li><a href="{{ url('/auth/login') }}">Login</a></li>
<li><a href="{{ url('/auth/register') }}">Register</a></li>
@else
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">{{ Auth::user()->name }} <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a href="{{ url('/profile') }}">Profile</a></li>
<li><a href="{{ url('/auth/logout') }}">Logout</a></li>
</ul>
</li>
@endif
但是如何为登录用户和管理员执行此操作?我目前有
<ul class="nav navbar-nav">
<li><a href="{{ url('/') }}">Home</a></li>
@if (Auth::guest())
@else
<li><a href="{{ url('/admin') }}">Admin Dashboard</a></li>
@endif
</ul>
我在管理路线上设置了中间件,如此
Route::get('admin', ['middleware' => 'admin', 'uses' => 'AdminController@index']);
看起来像
public function handle($request, Closure $next)
{
if ($request->user()->role != 1)
{
return redirect('home');
}
return $next($request);
}
这没关系,我只是不知道如何定义刀片模板的一部分。
答案 0 :(得分:6)
您的用户模型看起来有一个名为role
的属性,因此您可以执行以下操作:
<ul class="nav navbar-nav">
<li><a href="{{ url('/') }}">Home</a></li>
@if (Auth::user()->role != 1)
{{-- I am not an admin user --}}
@else
{{-- I am an admin user --}}
@endif
</ul>
如果不是您的情况,则需要向用户模型添加新属性。通过这种方式,您可以模拟上面的代码。
为了获得更好的代码结构和顺序,我建议您在用户模型中进行如下操作:
public function isAdmin(){
return (\Auth::check() && $this->role == 1);
}
或另一个检查是否是普通用户:
/** An user who is authenticated but it is not an admin */
public function isRegular(){
return (\Auth::check() && $this->role != 1);
}
然后,在您的应用程序和视图中,您可以使用它们:
@if (Auth::user()->isRegular())
{{-- I am not an admin user --}}
@else
{{-- I am an admin user --}}
@endif
或者
@if (Auth::user()->isAdmin())
{{-- I am an admin user --}}
@else
{{-- I am not an admin user --}}
@endif