Laravel Breeze环境下基于用户角色展示yaminncco/vue-sidebar-menu元素方案问询
该组件本身没有内置权限逻辑,但完全可以通过前置过滤菜单配置的方式实现需求,不需要官方提供专门的功能支持:
- 后端共享权限数据到前端:在Laravel的
HandleInertiaRequests中间件的share方法中,追加用户的角色标识、权限列表字段,前端所有页面可以直接通过$page.props.auth.user获取到对应的权限数据。 - 改造菜单配置结构:在原有侧边栏菜单配置数组中,为每个菜单项新增自定义权限标识字段,比如管理员专属菜单加
onlyAdmin: true,普通权限菜单加requiredPermission: 'xxx',用来标记该菜单的访问门槛。 - 渲染前过滤菜单:在侧边栏组件中先拿到全局共享的用户权限数据,对原始菜单配置做递归过滤:如果是管理员直接返回全量菜单,普通用户则保留符合自身权限的菜单项,最终将过滤完成的数组传给
vue-sidebar-menu的menu属性即可生效。
适配Laravel Breeze + Inertia栈的侧边栏方案推荐
如果后续要扩展更多侧边栏自定义能力,更推荐以下两种无额外兼容成本的方案:
- 原生自定义侧边栏组件:直接基于Breeze自带的导航样式体系手写侧边栏,不需要引入第三方依赖,权限判断、样式修改、功能扩展都完全可控,适配成本最低。
- 采用Headless UI的Disclosure组件:该无样式组件原生支持侧边栏所需的折叠、嵌套菜单、响应式适配等能力,可以完全自定义成符合项目设计的样式,和Inertia的路由跳转逻辑适配性极高,权限控制逻辑和上述过滤逻辑完全一致。
内容的提问来源于stack exchange,提问作者Abdou_dev
相关产品推荐
相关产品推荐

