菜单权限通过角色间接分配给用户组,需为菜单项设置permission字段绑定权限标识,再在后台创建权限、分配给角色、将用户加入角色,系统自动控制菜单可见性。

菜单权限不是直接分配给用户组的,而是通过“角色”作为中间层来实现。Laravel-admin 的 RBAC 模型中,菜单项绑定的是权限标识(slug),而权限必须先分配给角色,角色再分配给用户——这才是标准、可控、可复用的做法。
1. 确保菜单项已关联权限标识
菜单本身不带权限控制能力,必须为每个菜单项显式指定 permission 字段,且该字段值需与后台已创建的权限 slug 一致:
- 编辑菜单配置(如在
app/Admin/Menu.php或自定义菜单类中) - 为关键菜单项添加
'permission' => 'users.index'这类标识 - 例如:
'List Users' => ['route' => 'admin.users.index', 'permission' => 'users.index'] - 未设置 permission 的菜单,默认所有登录用户都可见(不推荐)
2. 在后台创建对应权限并记录 slug
访问 /admin/auth/permissions 页面完成以下操作:
- 点击“新建权限”,填写:权限标识(如
users.index)、名称(如“查看用户列表”) - HTTP 方法选
GET,路径填对应路由(如/admin/users或留空,仅用于菜单控制时可不严格匹配) - 保存后,该 slug 就可用于菜单绑定和角色分配
3. 创建角色并分配权限
进入 /admin/auth/roles 页面:
- 新建角色,例如“内容编辑员”
- 在“权限”选项卡中,勾选你刚创建的
users.index、posts.create等具体权限 - 一个角色可批量拥有多个权限,避免逐个用户配置
4. 将用户加入对应角色
打开 /admin/auth/users:
- 编辑目标用户(如张三)
- 在“角色”选项卡中,勾选“内容编辑员”角色
- 保存后,该用户登录时,菜单栏将自动只显示其角色拥有的权限所对应的菜单项
整个流程依赖 Laravel-admin 的权限继承机制:菜单可见性由 can($permission) 判断驱动,而该方法会合并用户直连权限 + 所属角色的全部权限。只要角色分配准确,菜单就会自动收放,无需额外编码或中间件干预。


















