Skip to content

Latest commit

 

History

History
101 lines (74 loc) · 3.54 KB

File metadata and controls

101 lines (74 loc) · 3.54 KB

Shadmin

基于 Go + React 构建的企业级全栈 RBAC 权限管理系统

简体中文 · English

Shadmin 展示

Go React TypeScript License

Gin · Ent ORM · Casbin · Shadcn UI · TanStack Router · Tailwind CSS


✨ 特性

  • 🏗️ 整洁架构 — 领域驱动的分层设计(Controller → Usecase → Repository)
  • 🔐 Casbin RBAC 权限管理 — 细粒度的基于角色的 API 和菜单访问控制
  • 🌗 亮色 & 暗色主题 — 无缝切换,支持系统偏好检测
  • 📱 响应式设计 — 适配桌面端、平板和移动端
  • 🔍 全局搜索 — 快速导航菜单和资源
  • 📊 数据仪表板 — 图表和统计数据可视化
  • 🗂️ 动态菜单管理 — 后端驱动的菜单树,权限感知渲染
  • 🗄️ 多数据库支持 — 开箱即用支持 SQLite(默认)、PostgreSQL、MySQL

🚀 跑起来

环境要求

  • Go 1.25+
  • Node.js 18+ & pnpm(或 npm)

运行

# 克隆仓库
git clone https://github.com/ahaodev/shadmin.git
cd shadmin

# 安装依赖并构建前端
cd web && pnpm install && pnpm build

# 启动后端(从项目根目录执行)
# 生成 Ent 代码,内嵌 web/dist/,监听 :55667
# 首次运行时自动生成 .env
cd ..
go generate ./ent
go run .

默认账号: admin / 123

🔐 认证与权限

  • 认证:JWT 访问令牌 + 刷新令牌,通过 Authorization: Bearer <token> 传递
  • API 鉴权:Casbin 中间件对受保护路由检查 (userID, path, method)
  • 前端守卫:权限感知组件(PermissionButtonPermissionGuard
  • 菜单系统:通过 /api/v1/resources 获取动态菜单树,自动适配用户权限
📁 项目结构
shadmin/
├── api/            # 控制器和路由(Gin)
├── bootstarp/      # 应用引导、数据库、Casbin、种子数据
├── domain/         # 实体、DTO、接口定义
├── ent/schema/     # Ent ORM 数据模型
├── repository/     # 数据访问层
├── usecase/        # 业务逻辑层
├── internal/       # 内部工具
├── pkg/            # 公共包
├── web/            # React 前端(Vite + shadcn/ui)
│   └── src/
│       ├── routes/       # TanStack 文件路由
│       ├── features/     # 功能模块
│       ├── services/     # API 封装(Axios)
│       └── stores/       # Zustand 状态管理
├── docs/           # 文档和图片
└── main.go         # 入口文件

📚 文档

📄 许可证

MIT