删除 Laravel-admin 菜单需四步:1. 后台菜单管理中删除菜单项;2. 手动删除 admin_permissions 表中对应 slug 的权限记录;3. 清理 admin_role_permissions 中失效的绑定关系,可用 php artisan admin:check-permissions;4. 如启用缓存,执行 php artisan cache:forget admin.permissions。

删除 Laravel-admin 菜单时,仅移除菜单配置不会自动清理关联的权限(admin_permissions 表中的记录),也不会解除角色与权限的绑定。若不手动处理,残留权限可能造成安全风险或权限校验异常。完整执行需覆盖菜单、权限项、角色-权限关系三层。
1. 删除菜单配置项
菜单由 config/admin-menu.php 或数据库表 admin_menu 管理。推荐统一使用数据库方式(Laravel-admin 默认启用):
- 登录后台,进入 系统管理 → 菜单管理
- 找到目标菜单项,点击「删除」按钮(软删除,实际标记为
parent_id = 0且uri为空) - 确认删除后,该菜单不再显示,但其关联的权限记录仍保留在
admin_permissions表中
2. 手动清理对应权限记录
菜单删除后,需同步删除其在 admin_permissions 表中生成的权限条目(通常 slug 与菜单 uri 一致,如 users.index、products.destroy):
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
- 执行 SQL 清理(建议先备份):
DELETE FROM admin_permissions WHERE slug IN ('menu.users', 'users.index', 'users.create'); - 或使用 Tinker 快速操作:
php artisan tinker<br>> \Encore\Admin\Permissions\Permission::whereIn('slug', ['users.index', 'users.edit'])->delete(); - 注意:不要直接删
name为中文的权限项,应以slug为准,它是权限校验的唯一标识
3. 解除角色与已删权限的绑定
权限被删后,原绑定关系(admin_role_permissions 表)不会自动清除,需主动清理:
- 执行 SQL:
DELETE FROM admin_role_permissions WHERE permission_id NOT IN (SELECT id FROM admin_permissions); - 或用命令行一键修复(Laravel-admin 内置):
php artisan admin:check-permissions
该命令会扫描并清理所有孤立的角色-权限关联 - 也可进入后台「系统管理 → 角色管理」,编辑每个角色,手动取消勾选已失效的权限项
4. 可选:刷新权限缓存(如启用)
若项目启用了权限缓存(例如通过 cache.permissions 配置),需清空:
php artisan cache:forget admin.permissions- 或通用清缓存:
php artisan cache:clear(影响范围更广,按需使用)
执行完以上四步,菜单、权限定义、角色授权关系全部清理干净,无残留、无越权风险。整个过程无需修改核心代码,全部基于 Laravel-admin 原生机制完成。

















