我没有找到如何在使用@can时,在视图中使用从句(OR,AND)以检查多个功能...
我尝试过:
@can(['permission1', 'permission2'])
@can('permission1' or 'permission2')
@can('permission1' || 'permission2')
但是不起作用 ;(
我没有找到如何在使用@can时,在视图中使用从句(OR,AND)以检查多个功能...
我尝试过:
@can(['permission1', 'permission2'])
@can('permission1' or 'permission2')
@can('permission1' || 'permission2')
但是不起作用 ;(
2018年5月24日,Laravel v.5.6.23新增了@canany指令。
用法:
@canany(['edit posts', 'delete posts'])
<div class="actions">
@can('edit posts')
<button>Edit post</button>
@endcan
@can('delete posts')
<button>Delete post</button>
@endcan
</div>
@endcanany
您可以使用Gate门面:
@if(Gate::check('permission1') || Gate::check('permission2'))
@endif
我在我的Laravel 5.4应用程序中添加了这个指令,它允许我在我的Blade视图中使用一个新的@canany('write|delete')
指令。
// AppServiceProvider.php@boot()
Blade::directive('canany', function ($arguments) {
list($permissions, $guard) = explode(',', $arguments.',');
$permissions = explode('|', str_replace('\'', '', $permissions));
$expression = "<?php if(auth({$guard})->check() && ( false";
foreach ($permissions as $permission) {
$expression .= " || auth({$guard})->user()->can('{$permission}')";
}
return $expression . ")): ?>";
});
Blade::directive('endcanany', function () {
return '<?php endif; ?>';
});
在 Blade 视图中的示例:
@canany('write|create')
...
@endcanany
这是关于在5.4上扩展Blade的文档
@can
。
@if( @can('permission1') || @can('permission2') )
@if( Gate::check('permission1') || Gate::check('permission2') )
<?php if(@can('permission1') || @can('permission2')): ?>
。请注意, @can()
是一个合法的函数调用(at符号抑制警告),但 can()
方法并不存在。 - tommyspatie包
,那么你可以通过以下方法轻松完成...
使用hasAnyPermission()方法
@if(auth()->user()->hasAnyPermission(['permission1','permission2']))
// statements
@endif
Authenticated User
的can
方法。最初的回答。@if ( Auth::user()->can('permission1', App\Model::class) || Auth::user()->can('permission2', App\Model::class) )
@endif
@if(Gate::check('manage-users') || Gate::check('add-new-user')) 管理用户
<li>
<a href="{{url('/back/users')}}">
<i class="feather icon-users"></i>
<span class="menu-item" data-i18n="users">Manage Users</span>
</a>
</li>
@endif
只需使用 @canany(['permision1','permision2'])
@canany(['post.update', 'post.create'], [$post])
。但这并不是理想的,因为两个策略都使用了相同的参数。我建议你为我提供的示例制作自己的指令。 - Clément Baconnier