刀片模板中的授权检查

问题描述 投票:1回答:2

我需要控制对菜单项的访问。这是在AuthServiceProvider内部创建的Gate函数。如何在刀片模板中访问它

AuthServiceProvider

  Gate::define('isAdmin',function($user){
        return $user->type === 'admin';
    });

    Gate::define('isGeneralUser',function($user){
        return $user->type === 'user';
    });

    Gate::define('isPaidUser',function($user){
        return $user->type === 'paid';
    });
    Gate::define('isSubscriber',function($user){
        return $user->type === 'subscriber';
    });

[菜单

  <ul class="dropdown-menu">
    <li><a class="hvr-sweep-to-right" href="{{route('weekly-trades')}}">Weekly Trades</a></li>
    <li><a class="hvr-sweep-to-right" href="{{route('daily-trade')}}">Daily Trades</a></li>
    <li><a class="hvr-sweep-to-right" href="{{route('videos-articles-archive')}}">Videos & Articles Archive</a></li>
    <li><a class="hvr-sweep-to-right" href="{{route('blog-list')}}">Surplus forex Blogs</a>
    </li>

</ul>
                    </ul>
laravel
2个回答
1
投票

您可以轻松创建if blade directives并显示您拥有的每个角色的路线,如下所示:

Blade::if('isRole', function ($role) {
    return Auth::check() && Auth::user()->type === $role;
});

然后在刀片模板中,您可以像这样过滤路由:

@isRole('agent')
    // Agent routes
@elseisRole('admin')
    // Admin routes
@else
    // Other routes
@endisRole

P.S:我假设您想显示已登录用户的路由

编辑:您实际上创建了Gates,它限制了所有用户执行给定的操作,但这并不意味着您必须限制他们对页面的访问。您刚刚说过admin用户无法执行isAdmin操作,这没有多大意义:)

更新:要检查多个角色,您可以将Blade::if更改为接受roles的数组,而不是单个数组:

Blade::if('isRole', function ($roles = []) {
    if (empty($roles) || !Auth::check()) {
        return false;
    }

    return in_array(Auth::user()->type, $roles);
});

然后您可以将指令用作:

@isRole(['agent', 'admin'])
    // User is either agent or admin
@elseisRole(['admin'])
    // User is admin
@else
    // User is something else
@endisRole

0
投票

但是,它已经晚了,但是对某人有用,在这里您只想管理员查看条件内的内容

@can('isAdmin')
    <!-- The Current User is admin -->
@endcan
© www.soinside.com 2019 - 2024. All rights reserved.