如何使用中间件定义刀片模板的一部分?

时间:2015-03-17 02:07:49

标签: php laravel-5

我有导航栏,如果用户登录的是管理员,我想显示指向管理员仪表板的链接。如果没有,它应该什么都不显示。我和客人有类似的东西,例如

@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);
}

这没关系,我只是不知道如何定义刀片模板的一部分。

1 个答案:

答案 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