Laravel Blade中如何正确判断用户同时无更新删除权限并优化写法?
解决Laravel Blade中判断用户同时缺少多个权限的简洁写法
问题分析
你尝试用@cannot(['update-user','delete-user'])实现“用户同时没有更新和删除用户权限时显示提示”,但该指令的数组参数是逻辑或(缺少任意一个权限就触发),不符合你需要的逻辑与(两个权限都缺少才触发)的需求。
优雅解决方案
方案1:使用cannot()辅助函数简化@if判断
直接用Laravel提供的cannot()辅助函数(默认针对当前认证用户),简化原有的冗长代码:
@if(cannot('update-user') && cannot('delete-user')) <span class="text-danger">You do not have administrative access</span> @endif
方案2:自定义Gate封装权限逻辑
如果这个权限判断会在多处用到,推荐在AuthServiceProvider中自定义一个Gate,把逻辑封装起来:
// app/Providers/AuthServiceProvider.php public function boot() { $this->registerPolicies(); Gate::define('admin-access', function ($user) { // 只要具备其中一个权限就拥有管理员访问权 return $user->can('update-user') || $user->can('delete-user'); }); }
之后在Blade模板中就能用简洁的指令实现需求:
@cannot('admin-access') <span class="text-danger">You do not have administrative access</span> @endcannot
方案3:语义化的@unless指令
用@unless替代@if,语义上更贴合“除非具备任一权限,否则显示提示”的逻辑:
@unless(can('update-user') || can('delete-user')) <span class="text-danger">You do not have administrative access</span> @endunless
内容的提问来源于stack exchange,提问作者rafig khiyavi
相关产品推荐
相关产品推荐

