默认情况下Laravel-admin自动隐藏无权限菜单,关闭该行为需确保菜单未绑定任何权限或角色;清空菜单的permission_id或roles字段,或代码中添加时不传权限参数即可,无需全局配置。

默认情况下,Laravel-admin 会自动隐藏用户无权限访问的菜单项。如果你希望**保留无权限菜单的显示(即关闭自动隐藏)**,关键不是“关闭某个开关”,而是**确保菜单未绑定任何权限或角色**——因为只有绑定了权限/角色的菜单,才会触发权限校验与隐藏逻辑。
菜单不隐藏的核心条件
菜单是否被隐藏,取决于它是否关联了权限控制:
- 菜单未设置
permission_id或roles字段 → 视为公共菜单 → 始终显示 - 菜单设置了
permission_id或roles→ 系统检查当前用户是否匹配 → 不匹配则隐藏 - 即使开启了
'check_route_permission' => true,也只影响路由访问,不影响菜单显示逻辑
关闭自动隐藏的两种实际做法
所谓“关闭自动隐藏”,本质是让菜单脱离权限控制链:
- 后台管理页面操作:进入「菜单管理」,编辑对应菜单项,清空「权限」和「角色」字段,保存即可
-
代码中动态添加时省略权限绑定:在
app/Admin/bootstrap.php中使用$menu->add()时,不传'permission_id'或'roles'键
注意:没有全局“关闭菜单隐藏”的配置项
Laravel-admin 并未提供类似 admin.menu.hide_unauthorized = false 这样的开关。它的设计原则是“有权限约束才做隐藏”,而非“有权限约束才做显示”。因此:
- 不需要额外配置参数来“关闭隐藏”
- 也不建议通过重写中间件或覆盖 Menu 类来强行绕过权限判断
- 若需部分菜单公开、部分受控,只需差异化设置绑定关系即可
验证是否生效
修改后记得清除缓存:
- 执行
php artisan config:clear - 如启用了菜单缓存,还需执行
php artisan admin:menu:clear-cache(Dcat Admin)或刷新后台菜单缓存 - 用无权限账号登录,确认目标菜单是否可见


















