我需要控制对菜单项的访问。这是在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>
答案 0 :(得分: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
答案 1 :(得分:0)
但是,已经晚了,但是对某人有用,在这里您只想管理员查看条件内的内容
@can('isAdmin')
<!-- The Current User is admin -->
@endcan