You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8权限校验中间件失效原因及修复方案咨询

Laravel 8 权限校验中间件拦截问题解答

1. Bug成因

你用Auth::user()->role->permissions->toArray()得到的是权限对象的数组,每个元素是包含id、name、created_at等字段的关联数组。而$permission是字符串类型的权限标识(比如edit-settings),直接用in_array比较字符串和整个关联数组,自然返回false,导致有权限的用户被拦截。

视图里能正常显示权限,是因为你在视图中循环输出的是每个权限对象的name字段(比如$permission->name),但中间件里没提取这个字段就直接做数组匹配了。

2. 最简修复方案

有两种极简修复方式,选其一即可:

方式一:提取权限名称数组后再判断

把权限集合转换成仅包含name字段的数组,再用in_array判断:

dd(in_array($permission, Auth::user()->role->permissions->pluck('name')->toArray()));

方式二:直接用集合的contains方法(更简洁)

利用Laravel集合的内置方法直接判断,无需手动转数组:

dd(Auth::user()->role->permissions->contains('name', $permission));

内容的提问来源于stack exchange,提问作者Razvan Zamfir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:45:33