Skip to content

Away0x/gin_bbs

Repository files navigation

Gin BBS App

项目目录结构

展开查看

├── app              项目核心逻辑代码
│    ├── controllers 控制器
│    ├── models      模型
│    ├── auth        用户相关
│    ├── cache       缓存
│    ├── cron        定时任务
│    ├── helpers     帮助方法
│    ├── policies    权限
│    ├── requests    参数验证
│    ├── services    复杂查询
│    └── viewmodels  数据转换
│
├── bootstrap        各组件初始化
│
├── config           配置中心
│
├── database         数据库
│    └── factory     数据 mock
│
├── pkg              项目依赖
│
├── public           项目静态文件
│
├── docs             swagger api doc
│
├── test             测试文件
│
├── resources        前端源码
│    └── view        go 模板文件
│
├── routes           路由
│    └── middleware  中间件
│    └── routes.go   路由注册
│    └── api.go      api 路由注册
│    └── web.go      页面路由注册
│
├── storage          存放日志等文件
│
├── main.go          项目入口
│
├── config.yaml      项目配置
│
├── deploy.sh        部署脚本
│
├── Makefile         Makefile 文件
│
├── vue-admin-app    vue 管理员后台前端源码
│
├── taro-app         taro web app 源码(小程序 ... 端)
│
└── flutter_app      flutter app 源码(Android iOS 端)

启动

# 需先安装 fresh (https://github.com/gravityblast/fresh)
# go get github.com/pilu/fresh

# 启动前建议配置环境变量: GOPROXY=https://goproxy.io

cd gin_bbs
cp ./config.example.yaml ./config.yaml
make dev # 或者也可直接 fresh -c ./fresh.conf
# 项目相关命令参见 Makefile

数据库配置需要修改 config.yaml

DB:
  CONNECTION: mysql
  HOST: 127.0.0.1
  PORT: 3306
  DATABASE: gin_bbs
  USERNAME: your_username
  PASSWORD: your_password

如果运行的是 debug 模式,数据库名应该为 gin_bbs_debug

实现功能

  • CSRF 验证
  • flash 消息闪现
  • 记忆上次表单提交的数据
  • 参数校验模块
  • 命名路由
  • 分页
  • 发送邮件
  • 用户权限模块
  • 日志
  • 前端构建 (typescript、sass ...)
  • 验证码
  • pongo2 template
  • 文件上传
  • 发送短信
  • 微信登录
  • swagger api 文档
  • JWT (刷新、黑名单)
  • 接口测试
  • 推送
  • vue 管理员后台系统
  • taro web 移动端 (小程序 ... 端)
  • flutter 移动端 app (Android iOS 端)

角色

角色的权限从低到高,高权限的用户将包含权限低的用户权限

  • 游客 —— 没有登录的用户
  • 用户 —— 注册用户,没有多余权限
  • 管理员 —— 辅助超级管理员做社区内容管理
  • 站长 —— 权限最高的用户角色

信息结构

  • 用户 —— 模型名称 User,论坛为 UGC 产品,所有内容都围绕用户来进行
  • 话题 —— 模型名称 Topic,LaraBBS 论坛应用的最核心数据,有时我们称为帖子
  • 分类 —— 模型名称 Category,话题的分类,每一个话题必须对应一个分类,分类由管理员创建
  • 回复 —— 模型名称 Reply,针对某个话题的讨论,一个话题下可以有多个回复

用例

1. 游客

  • 游客可以查看所有话题列表
  • 游客可以查看某个分类下的所有话题列表
  • 游客可以按照发布时间和最后回复时间进行话题列表排序
  • 游客可以查看单个话题内容
  • 游客可以查看话题的所有回复
  • 游客可以通过注册按钮创建用户(用户注册,游客专属)
  • 游客可以查看用户的个人页面

2. 用户

  • 用户可以在某个分类下发布话题
  • 用户可以编辑自己发布的话题
  • 用户可以删除自己发布的话题
  • 用户可以回复所有话题
  • 用户可以删除自己的回复
  • 用户可以编辑自己的个人资料
  • 用户可以接收话题新回复的通知

3. 管理员

  • 管理员可以访问后台
  • 管理员可以编辑所有的话题
  • 管理员可以删除所有的回复
  • 管理员可以编辑分类

4. 站长

  • 站长可以编辑用户
  • 站长可以删除用户
  • 站长可以修改站点设置
  • 站长可以删除分类

1

2

3

4

5

6

7

8