|
---
## 🔥 为什么选择这个模板?
### vs 其他模板
| 特性 | 本模板 | 其他模板 |
| ------------- | ------------------------- | --------------- |
| 完整RBAC权限 | ✅ 生产就绪 | ⚠️ 简单示例 |
| 多种缓存支持 | ✅ Redis/LevelDB/Memory | ❌ 仅Redis或无 |
| 缓存自动降级 | ✅ 智能降级 | ❌ 无 |
| 一键重命名 | ✅ 独家功能 | ❌ 无 |
| Docker支持 | ✅ 完整配置 | ⚠️ 基础配置 |
| 文档完善度 | ✅ 10+份详细文档 | ⚠️ 基础README |
| 单元测试 | ✅ 示例+工具 | ❌ 无 |
| 生产就绪 | ✅ 是 | ⚠️ 需完善 |
### 实际案例
> "使用这个模板,我们在2天内完成了新项目的基础架构搭建,节省了至少1周的开发时间。"
>
> — 某科技公司后端团队
> "RBAC权限系统设计得很合理,直接用于生产环境,零问题。"
>
> — 开源贡献者
---
## 🤝 贡献指南
我们欢迎所有形式的贡献!
### 如何贡献
1. **Fork** 本项目
2. **创建**特性分支 (`git checkout -b feature/AmazingFeature`)
3. **提交**你的改动 (`git commit -m 'Add some AmazingFeature'`)
4. **推送**到分支 (`git push origin feature/AmazingFeature`)
5. **提交** Pull Request
### 贡献类型
- 🐛 **Bug修复** - 发现bug?提交Issue或PR
- ✨ **新特性** - 有好想法?我们期待你的贡献
- 📝 **文档改进** - 文档不清晰?帮我们改进
- 🌍 **翻译** - 帮助我们支持更多语言
- 💡 **建议** - 任何建议都欢迎
### 开发指南
```bash
# 克隆你fork的仓库
git clone https://github.com/code-innovator-zyx/gin-template.git
# 安装依赖
make install
# 运行测试
make test
# 代码检查
make check
# 提交前确保通过所有检查
make all
```
---
## 📈 项目统计




---
## 💬 社区和支持
- 💬 **讨论区** - [GitHub Discussions](https://github.com/code-innovator-zyx/gin-template/discussions)
- 🐛 **Bug反馈** - [GitHub Issues](https://github.com/code-innovator-zyx/gin-template/issues)
- 📧 **Email** - 1003941268@qq.com
- 📱 **微信群** - 扫描二维码加入
---
## 📄 许可证
本项目采用 [MIT License](LICENSE) 许可证。
这意味着你可以:
- ✅ 商业使用
- ✅ 修改
- ✅ 分发
- ✅ 私有使用
唯一的要求是保留版权声明。
---
## 🙏 致谢
感谢所有为本项目做出贡献的开发者!
### 灵感来源
- [gin-gonic/gin](https://github.com/gin-gonic/gin) - 优秀的Web框架
- [go-clean-arch](https://github.com/bxcodec/go-clean-arch) - 架构设计灵感
## 🎉 开始使用
**不要只是收藏,动手试试吧!**
[快速开始](./docs/QUICK_START.md) · [查看文档](./docs/DOCUMENTATION.md) · [提交Issue](https://github.com/code-innovator-zyx/gin-template/issues)
### 如果这个项目对你有帮助,请给一个⭐️
**Made with ❤️ by [mortal](https://github.com/code-innovator-zyx)**
---
## 附录:RBAC权限控制设计
点击展开详细设计
### 核心模型
```
┌─────────┐ ┌─────────┐ ┌──────────┐
│ User │────▶│ Role │────▶│ Resource │ [实际授权路径]
└─────────┘ └─────────┘ └──────────┘
用户 角色 资源
↓
┌─────────────┐
│ Permission │ [仅UI分组]
└─────────────┘
权限组
```
**架构说明:**
- **实际授权**:User → Role → Resource (通过 `role_resources` 表)
- **UI展示**:Resource 可选关联 Permission (通过 `permission_id` 字段)
### 数据库设计(新架构)
```sql
-- 用户表
users (id, username, password, email, status, created_at, updated_at)
-- 角色表
roles (id, name, description, created_at, updated_at)
-- 权限组表(仅用于UI展示分组)
permissions (id, name, code, created_at, updated_at)
-- 资源表(实际的权限控制对象)
resources (id, path, method, description, permission_id, created_at, updated_at)
-- permission_id 可选,仅用于UI分组
-- 用户-角色关联表
user_roles (id, user_id, role_id)
-- 角色-资源关联表(实际授权)
role_resources (id, role_id, resource_id)
```
**关键变化:**
- ❌ 删除 `role_permissions` 表
- ✅ 新增 `role_resources` 表(实际授权)
- 📝 `permissions` 表仅用于UI分组展示
### 权限验证流程(新架构)
```go
// 1. 用户请求API
GET /api/v1/users
// 2. 中间件拦截
middleware.JWT() // 验证身份
middleware.Permission() // 验证权限
// 3. 权限检查(带缓存)
cacheKey := "permission:user_123:GET:/api/v1/users"
if exists := cache.Get(cacheKey); exists {
return cached_result // 缓存命中,2ms
}
// 4. 查询数据库(新架构:直接查询 role_resources)
SELECT COUNT(*) FROM resources r
JOIN role_resources rr ON r.id = rr.resource_id
JOIN user_roles ur ON rr.role_id = ur.role_id
WHERE ur.user_id = ? AND r.path = ? AND r.method = ?
// 5. 缓存结果(10分钟)
cache.Set(cacheKey, result, 10*time.Minute)
// 6. 返回结果
return result
```
**性能优势:**
- ✅ 查询路径更短(不再经过 permissions 表)
- ⚡ 查询更快(减少一次 JOIN)
- 🎯 权限控制更精确(直接到资源级别)
### 设计优势(新架构)
- ✅ **灵活性** - 支持一用户多角色
- ✅ **安全性** - 默认拒绝策略
- ✅ **性能优化** - 查询路径更短,减少JOIN操作
- ✅ **多种缓存** - 支持Redis/LevelDB/Memory三种缓存
- ✅ **可维护性** - 清晰的双层模型(授权层+展示层)
- ✅ **可扩展性** - 易于添加新资源和权限
- 🎨 **UI友好** - Permission用于前端展示分组
- 🎯 **细粒度** - 直接控制到每个API资源
---
## 常见问题 (FAQ)
1. 如何修改数据库配置?
编辑 `app.yaml` 文件:
```yaml
database:
dsn: "root:password@tcp(localhost:3306)/mydb?charset=utf8mb4"
max_open_conns: 100
max_idle_conns: 10
```
2. 如何添加新的API接口?
```bash
# 1. 在 internal/logic/v1 创建业务逻辑
# 2. 在 internal/handler/v1 创建路由处理
# 3. 在路由组中注册路由
# 4. 运行 make swagger 更新文档
```
3. 如何配置权限?(新架构)
1. 创建权限组(可选,仅用于UI分组):POST /api/v1/permissions
2. 创建角色:POST /api/v1/roles
3. 绑定资源到角色(实际授权):POST /api/v1/roles/:id/resources
4. 分配角色给用户:POST /api/v1/users/:id/roles
**注意**:实际授权是通过绑定资源(Resource)到角色实现的,Permission仅用于UI展示分组。
4. 生产环境部署建议?
- ✅ 使用环境变量存储敏感配置
- ✅ 启用Redis缓存
- ✅ 配置日志级别为Warn或Error
- ✅ 使用Docker部署
- ✅ 配置健康检查
- ✅ 启用HTTPS
---
---
## ⭐ Star历史
[](https://star-history.com/#code-innovator-zyx/gin-template&Date)
---
**[⬆ 回到顶部](#-gin-enterprise-template)**
|