菜单权限缓存不更新需执行php artisan admin:menu-cache重建菜单缓存,必要时同步清理cache:clear、config:clear、route:clear及spatie权限缓存permission:cache-reset,并验证admin_menu表permission字段与权限配置一致性。

菜单权限缓存不更新,通常是因为 Laravel-admin 的菜单数据被缓存后未及时刷新,导致新增/修改的菜单、权限或角色在后台不生效。关键不是清通用缓存,而是针对性重载菜单缓存。
执行 admin:menu-cache 命令
这是 Laravel-admin 专用的菜单缓存刷新命令,直接重建菜单结构缓存:
- 运行 php artisan admin:menu-cache
- 该命令会重新读取
admin_menu表数据及权限配置,生成最新菜单树 - 无需重启服务,刷新后台页面即可看到变化
连带清理相关缓存(必要时)
若菜单仍不更新,说明其他缓存层干扰了权限判断,需同步清理:
- php artisan cache:clear — 清空全部应用缓存(含权限、菜单等)
- php artisan config:clear — 防止配置缓存中残留旧的权限设置
- php artisan route:clear — 避免路由中间件因缓存未识别新权限规则
注意 Spatie 权限缓存是否独立影响
Laravel-admin 底层若集成 spatie/laravel-permission,其权限检查也依赖自身缓存:
- 执行 php artisan permission:cache-reset(非 Laravel-admin 自带,但必须运行)
- 否则即使菜单显示了,点击时仍可能报“无权限”,因为
PermissionRegistrar缓存未刷新 - 也可在数据库迁移或 Seeder 中手动调用:
app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions()
验证与预防
确认菜单表 admin_menu 中字段 permission 值正确(如 users.view),且对应权限已通过 Permission::create(['name' => 'users.view']) 创建并分配给角色。
开发阶段建议关闭菜单缓存:在 config/admin.php 中设 'menu_cache' => false,上线后再开启。











