探索 Nuxt.js 全栈能力:用 Better-Auth 打造类型安全的 RBAC 权限系统
☘️ 前言Hello感觉已经很久没有认真写文章了。自从 AI 热潮席卷技术圈之后传统的技术路线文章似乎渐渐失去了原本的参考意义。这次项目的开发初衷其实是对Better Auth很感兴趣想借助一个全新项目来系统学习它。在技术选型阶段我在Next.js和Nuxt.js之间犹豫了一下。不过考虑到自己之前已经用Next.js做过不少项目比较熟悉而且工作中也主要使用React相关技术栈所以这次决定尝试点不一样的最终选择了Nuxt.js。原本的计划只是实现一个基础的鉴权模块包括登录、注册这些核心功能。但随着开发的推进又觉得动态菜单和权限配置也应该一并加上于是功能越做越多不知不觉就发展成了现在这个规模。如果大家有兴趣欢迎去看看也欢迎交流讨论。 项目简介Better Nuxt 是一个现代化的全栈后台管理系统前端基于Nuxt.js和Nuxt UI构建后端采用Better-Auth认证框架与Drizzle ORM配合PostgreSQL数据库实现。https://github.com/baiwumm/better-nuxt本项目集成了当前流行的前后端技术栈是学习全栈开发和现代认证授权的理想参考项目。✨ 特性现代化全栈架构前沿技术深度整合Nuxt 3、Better-Auth、Nuxt UI、Drizzle与PostgreSQL紧跟现代Web技术趋势。极致性能SSR/SSG混合渲染、高效数据库查询优化兼顾 SEO 与用户体验。安全可靠内置完备认证体系结合强类型定义从源头降低运行时错误。开箱即用的认证系统集成 Better-auth支持多策略身份验证、会话管理与权限控制为应用提供安全可靠的用户体系可视化主题配置中心内置 18 种主题主色、明暗模式、圆角档位与路由动画满足多品牌与个性化展示需求国际化支持多语言中/英一键切换通过后台可视化管理配置灵活适配企业级后台与多地域业务场景️细粒度权限与动态菜单系统集成角色权限RBAC、动态菜单生成、按钮级权限控制前后端统一鉴权精准管控每个操作节点当用户登录后后端需要查询聚合数据通过userRoles找到用户关联的所有roleId。通过roleMenus找到这些角色关联的所有menuId。权限合并规则如果用户拥有多个角色且多个角色都拥有同一个菜单的权限则权限位permissions取最大值按位或运算 |。权限位Bitmask的计算与判断假设我们定义了以下权限常量// 建议使用 2 的幂次方 export const PERMISSIONS { VIEW: 1 0, // 1 - 查看 CREATE: 1 1, // 2 - 新增 EDIT: 1 2, // 4 - 编辑 DELETE: 1 3, // 8 - 删除 EXPORT: 1 4, // 16 - 导出 };如何在业务代码中判断是否有某个权限// 假设从数据库查出的 role_menus.permissions 为 7 (意味着包含 124即 查看新增编辑) const userPermissions 7; // 检查是否有 删除 权限 (8) const canDelete (userPermissions PERMISSIONS.DELETE) PERMISSIONS.DELETE; // 结果false (因为 7 8 0) // 检查是否有 查看 权限 (1) const canView (userPermissions PERMISSIONS.VIEW) PERMISSIONS.VIEW; // 结果true (因为 7 1 1)注意点PostgreSQL 的 integer 类型是 32位有符号整数最大值为 2,147,483,647即231−1这意味着您最多只能定义 31 个不同的权限位0 到 30。智能版本更新提示内置nuxt-skew-protection版本检测机制自动提示用户刷新获取最新版本避免旧版本缓存导致功能不一致问题https://nuxtseo.com/docs/skew-protection/getting-started/introduction核心代码SkewNotification v-slot{ isCurrentChunksOutdated, dismiss, reload, timeAgo } Transition enter-active-classtransition duration-300 ease-out enter-from-classopacity-0 translate-y-2 enter-to-classopacity-100 translate-y-0 leave-active-classtransition duration-200 ease-in leave-from-classopacity-100 translate-y-0 leave-to-classopacity-0 translate-y-2 div v-ifisCurrentChunksOutdated classfixed bottom-4 right-4 z-50 div classflex items-center gap-3 bg-white dark:bg-gray-900 rounded-full shadow-lg ring-1 ring-gray-200 dark:ring-gray-800 px-4 py-3 span classtext-lg✨/span div classtext-sm font-medium 检测到新版本! {{ timeAgo }} /div UButton colorprimary sizexs :labeli18nCommon(reload) iconlucide:refresh-cw clickreload / UButton colorneutral variantghost sizexs iconi-heroicons-x-mark-20-solid clickdismiss / /div /div /Transition /SkewNotification示例️ 技术栈-前端框架Vue 3.5 Nuxt.js 4-UI 组件库Nuxt UI 4.9-认证框架Better-Auth 1.6-数据库 ORMDrizzle ORM 0.45-数据库PostgreSQL 16 文件目录better-nuxt/ ├── .nuxt/ # Nuxt 自动生成的构建目录通常不需要手动修改 ├── app/ └── assets/ # 静态资源目录未编译的样式、图片、字体等 └── components/ # Vue 组件目录支持自动导入 └── composables/ # 组合式 API 目录自动导入 └── layouts/ # 布局组件目录如 DefaultLayout, AuthLayout └── middleware/ # 中间件目录路由守卫、权限校验等 └── pages/ # 页面视图目录基于文件系统的路由 ├── public/ # 静态资源目录不经过打包处理如 robots.txt, favicon.ico ├── server/ # 后端 API 服务目录Nuxt Nitro Server │ └── api/ # API 路由接口 │ └── middleware/ # 服务器端中间件 ├── .env # 环境变量配置文件注意勿提交至版本库 ├── .gitignore # Git 忽略文件配置 ├── app.config.ts # 应用配置文件 ├── auth-schema.ts # Better-Auth 认证相关 Schema 定义 ├── CHANGELOG.md # 版本更新日志 ├── commitlint.config.js # Commit 提交规范校验配置 ├── drizzle.config.ts # Drizzle ORM 配置文件 ├── eslint.config.mjs # ESLint 代码规范配置文件 ├── LICENSE # 开源许可证文件 ├── nuxt.config.ts # Nuxt 核心配置文件 ├── package.json # 项目依赖及脚本管理文件 ├── package-lock.json # 依赖版本锁定文件 ├── README.md # 项目说明文档 └── tsconfig.json # TypeScript 配置文件 RBAC 权限映射关系 演示图 总结这次从鉴权入手一路做到权限管理虽然范围远超最初设想但整个过程反而成了最好的学习方式——在真实场景中边做边学遇到问题再倒逼自己去理解Better Auth的机制和Nuxt.js的生态。项目目前还在持续完善中后续也会继续补充更多功能。如果你也在研究类似的技术方案或者对Better Auth有兴趣欢迎一起交流也希望能给正在做技术选型的朋友一些参考。代码已开源感兴趣的话欢迎star或提issue任何反馈都对我很有帮助。本项目未经严格测试可能存在Bug欢迎反馈。本项目仅供学习交流禁止用于商业用途。Githubhttps://github.com/baiwumm/better-nuxt线上预览https://nuxt.baiwumm.com/

相关新闻

DeepSeek V4实战测评:前端工程师视角下的国产大模型工程化能力

DeepSeek V4实战测评:前端工程师视角下的国产大模型工程化能力

1. 项目概述:这不是一次“跑分”,而是一场真实开发场景下的压力测试我做AI模型测评,从来不用标准Benchmark打分表。那玩意儿像体检报告——数值漂亮,但你真感冒发烧时,它救不了命。这次我把DeepSeek V4 Pro、DeepSeek …

2026/7/3 5:47:30 阅读更多 →
JAVA 八股文 第五章(元空间替代永久代)

JAVA 八股文 第五章(元空间替代永久代)

为什么 JVM 用元空间(Metaspace)替代永久代(PermGen)? 在 Java 发展过程中,JDK 8 做了一个非常重要的改动:移除了永久代(PermGen),引入了元空间(M…

2026/7/3 5:45:30 阅读更多 →
中伟视界:复合化工皮带异物检测 AI 系统,YOLOv12-MSA + 无监督异常检测,0.5 秒边缘实时识别落地实践

中伟视界:复合化工皮带异物检测 AI 系统,YOLOv12-MSA + 无监督异常检测,0.5 秒边缘实时识别落地实践

在复合化工企业的生产流程中,皮带输送系统承担原料转运核心任务。原料开采、装卸、堆放、运输全流程极易混入金属碎片、铁丝、木块、塑料、易燃易爆杂物。异物进入产线轻则堵塞溜槽、增加能耗,重则撕裂皮带,引发非计划停机与安全生产事故。传…

2026/7/3 5:41:29 阅读更多 →

最新新闻

AI Coding 的底层框架:一切优化都是在对抗熵增

AI Coding 的底层框架:一切优化都是在对抗熵增

导读 为什么 Prompt 写得再细,AI 还是会输出奇怪的结果?为什么新项目 AI 很好用,历史业务却总是翻车?本文作者从信息论出发,用一个简单的框架帮你拆解 AI Coding 里的种种困惑——当你不再跟着新概念焦虑,而…

2026/7/3 6:55:51 阅读更多 →
端到端自动驾驶如何理解绿色化带:从视觉感知到类人决策的挑战与实践

端到端自动驾驶如何理解绿色化带:从视觉感知到类人决策的挑战与实践

1. 项目概述:当“端到端”遇见“绿色化带”最近在自动驾驶圈子里,一个挺有意思的讨论点冒了出来,就是关于“端到端自动驾驶”在实际路测中,对“绿色化带”这类特殊道路元素的感知与决策表现。标题里那句“提前找好了green化带”&a…

2026/7/3 6:55:51 阅读更多 →
如何快速构建现代化管理平台:vue-fastapi-admin完整指南

如何快速构建现代化管理平台:vue-fastapi-admin完整指南

如何快速构建现代化管理平台:vue-fastapi-admin完整指南 【免费下载链接】vue-fastapi-admin ⭐️ 基于 FastAPIVue3Naive UI 的现代化轻量管理平台 A modern and lightweight management platform based on FastAPI, Vue3, and Naive UI. 项目地址: https://gitc…

2026/7/3 6:53:50 阅读更多 →
前端组件全局缓存复用机制

前端组件全局缓存复用机制

摘要首页楼层、商品卡片、筛选弹窗等高频组件频繁销毁重建会造成 DOM 重复渲染,拖慢页面切换速度。本文基于 Vue 内置 keep-alive 封装全局组件缓存管理工具,支持手动清除指定组件缓存、设置缓存有效期,减少重复 DOM 渲染开销,bid…

2026/7/3 6:53:50 阅读更多 →
如何快速提取RPA游戏资源:5分钟掌握unrpa专业工具

如何快速提取RPA游戏资源:5分钟掌握unrpa专业工具

如何快速提取RPA游戏资源:5分钟掌握unrpa专业工具 【免费下载链接】unrpa A program to extract files from the RPA archive format. 项目地址: https://gitcode.com/gh_mirrors/un/unrpa 想要轻松提取RenPy游戏中的图片、音频和文本资源吗?unrp…

2026/7/3 6:51:50 阅读更多 →
视频对比分析工具:技术决策者的效率提升利器

视频对比分析工具:技术决策者的效率提升利器

视频对比分析工具:技术决策者的效率提升利器 【免费下载链接】video-compare Split-screen video comparison tool using FFmpeg and SDL2 项目地址: https://gitcode.com/gh_mirrors/vi/video-compare 在视频处理和质量评估领域,传统的人工对比方…

2026/7/3 6:49:50 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻