Laravel Blade中如何判断用户无指定数组内的权限?
在Laravel Blade中实现@inverseCanAny反向权限判断指令
要实现你想要的反向@canany逻辑,最直接的方式是自定义Blade指令,步骤如下:
1. 注册自定义指令
在app/Providers/AppServiceProvider.php的boot方法中添加以下代码,注册@inverseCanAny和@endInverseCanAny指令:
use Illuminate\Support\Facades\Blade; public function boot() { // 注册@inverseCanAny指令 Blade::directive('inverseCanAny', function ($permissions) { // 逻辑:用户未认证 或 不具备任一指定权限时,执行指令内的内容 return "<?php if (!auth()->check() || !auth()->user()->canAny({$permissions})): ?>"; }); // 注册@endInverseCanAny闭合指令 Blade::directive('endInverseCanAny', function () { return "<?php endif; ?>"; }); }
注:如果你的场景仅针对已登录用户判断权限(排除游客),可以把逻辑简化为
!auth()->user()->canAny({$permissions}),去掉!auth()->check() ||即可。
2. 在Blade模板中使用
现在你可以直接用你设想的简洁写法:
@inverseCanAny(['store', 'update']) <p>你没有创建或编辑权限,请联系管理员</p> @endInverseCanAny
这个指令的逻辑完全等价于你最初的@canany加@else的写法,但结构更清晰,符合你的需求。
内容的提问来源于stack exchange,提问作者Satrio Akbar Sudigdo
相关产品推荐
相关产品推荐

