逐梦校友圈——项目系统设计与数据库设计

这个作业属于哪个课程 <班级的链接>
这个作业要求在哪里 <作业要求的链接>
这个作业的目标 1.项目系统设计
2.数据库设计
3.《系统设计说明书》
4.《数据库设计说明书》
5. 答辩ppt
其他参考文献 1.阿里巴巴Mysql数据库规约
2.数据库设计说明书编写规范(国标)
3.数据库系统概论(第四版) 王珊,萨师煊编著 高等教育出版社
4.构建之法(第三版) 邹欣编著 人民邮电出版社

预计开发计划

时间安排

周 数 任务目标 具体日期
第8周 全体成员:完成系统设计和数据库设计任务(4.23止)
后续(增加知识储备)
前端成员:跟进学习微信小程序开发知识,vue框架知识
后端成员:继续跟进SpringBoot框架的学习
4.19~4.25
第9周 继续学习开发框架,学习敏感词验证,审核策略等算法。
根据之前的分工,前后端开始进行开发
前端成员:1. 成员间做好任务分配
2. 完成部分微信小程序界面的开发,并做好简单交互功能
3. Web端后台界面同步开发
后端成员:1. 成员间做好任务分配
2. 对之前设置的接口,数据库进行编写
3. 与前端多加交流,调整任务
4.26~5.2
第10周 1. 继续完善上一周的任务
2. 对其他前面未完成的功能进行编写
3. 进行前后端整合及测试,修复遇到的bug
4.发布alpha版本
5.3~5.9
第11周 1. 完善功能 ,修复存在的bug
2. 反思alpha版本开发存在的问题
3. 讨论程序设计的问题或者缺陷,对程序进行必要的重新设计
5.10~5.16
第12周 1. 对上一次程序版本进行反思,寻求解决方案
2. 继续加强对开发相关知识的学习
5.17~5.23
第13周 继续加强对开发相关知识的学习 5.24~5.30
第14周 根据之前的反思结果方案进行再开发 5.31~6.6
第15周 编写和完善代码,对程序进行测试 6.7~6.13
第16周 1. 编写和完善代码,对程序进行测试
2. 发布beta版本
3. 事后总结
6.14-6.20

人员分工

学号 职位 工作内容
221801125 PM 项目进度安排,项目进度监督,项目文档更进
221801104 美工 界面UI,界面美化
221801209 后端 权限设置,数据库操作
221801215 后端 帖文页面接口
221801222 前端 前后端对接
221801230 前端 贴文卡片,组局卡片,消息卡片
221801231 前端 界面框架,界面拼接
221801321 后端 组局页面接口
221801411 后端 个人中心接口,微信认证

系统结构设计

结构设计

整个软件共分为7个模块,分别是

  1. 认证模块

  2. 校友圈模块

  3. 消息模块

  4. 发帖模块

  5. 拼局模块

  6. 个人模块

  7. 后台模块

一、认证模块

1.1学生基础信息认证模块

-提供学生基础信息验证

1.2学生个人证件认证模块

-提供学生个人证件图片上传

二、校友圈模块

2.1签到模块

-提供用户进行每日签到

2.2帖子搜索模块

-提供用户进行全局模糊搜索论文

2.3帖子详情模块

2.3.1评论帖子

-用户对帖子进行评论相关操作

2.3.2点赞帖子

-用户对帖子进行点赞相关操作

2.3.3赞赏帖子

-用户对帖子进行赞赏相关操作

2.3.4收藏帖子

-用户对帖子进行收藏相关操作

2.3.5拉黑帖子发布者

-用户对帖子发布者进行拉黑,不看他的相关帖子并且不与他私聊

2.3.6举报帖子

-用户对含有不正当内容的帖子进行举报

三、消息模块

3.1查看我的相关评论

-提供用户查看与其帖子相关的评论

3.2查看我的相关点赞

3.2.1查看我的相关赞赏

-提供用户查看与其帖子相关的赞赏

3.2.2查看我的相关点赏

-提供用户查看与其帖子相关的点赏

3.3查看我的相关拼局

-提供用户查看与其拼局相关的信息

3.4查看我的相关私聊

-提供用户与其他用户进行私聊

四、发帖模块

4.1帖子发布

4.1.1根据主题发布帖子

-提供用户根据主题帖子发布

4.1.2根据地址发布帖子

-提供用户根据地址帖子发布

五、拼局模块

5.1组局详情

5.1.1加入组局

-用户加入已创建好的组局

5.1.2评论组局

-用户评论已创建好的组局

5.2筛选组局信息

-用户根据条件显示想看到的组局内容

5.3发起组局

-用户创建新的拼局

5.4搜索组局

-用户搜索关键词相关组局

六、个人模块

6.1个人数据模块

6.1.1人品值记录模块

-显示用户的人品值数与人品值进出记录

6.1.2个人收藏模块

-显示用户的个人收藏记录

6.1.3个人帖子模块

-显示用户的个人帖子记录

6.1.3个人评论模块

-显示用户的个人评论记录

6.2附加功能模块

6.2.1新手帮助

-为用户提供使用该软件的新手帮助说明

6.2.2社区规范

-为用户提供使用该软件的社区规范说明

6.2.3逐梦树洞

-为用户提供私人的信息交流空间

6.2.4邀请校友

-为用户提供邀请校友进行分享

6.3系统模块

6.3.1设置模块

-对软件进行基础设置

6.3.2关于我们

-了解软件开发者相关信息和联系方式

6.3.3意见反馈模块

-对用户使用软件体验进行反馈

七、后台模块

7.1.1审核模块

-对用户的帖子评论图片等信息进行内容审核

7.1.2维护模块

-对软件的一些基础功能进行调整

功能模块层次图

功能模块层次图

ER图

从用户角度出发,寻找用户拥有的属性,寻找用户与其他类(帖文、组局等)的关联,确定之间的关系:1对多、1对1等,再补充其他类的拥有的属性。

用户和管理员部分

用户和管理员部分

帖文(post)部分

帖文

组局部分

组局

数据库表结构

数据库使用关系型数据库。数据库表结构设计在ER图的基础上,结合实体属性的存储方式,为各实体属性赋予相应的数据类型。

此外,为表示ER图中实体之间的一对多关系,数据库表中使用新增外键属性的方法对一对多的关系进行约束,例如帖子post与帖子的评论post_comment是一对多的关系,在post_comment中新增post_id属性与对应帖子post的id属性关联,建立外键约束,表示帖子评论所属的帖子,对帖子与帖子评论的一对多关系进行了刻画和约束。ER图中还出现了实体与自身的一对多约束,同样,在数据库设计时在表中建立了外键与自身关联,例如,一条帖子评论下可能包含有多条评论(楼中楼),设计时新增pre_id外键关联自身表的id属性,建立外键,表示帖子评论所属的上一级评论,对帖子评论与自身的一对多的关系进行了刻画和约束。

ER图中出现的多对多关系,考虑到要满足范式减少数据冗余,关系型数据库较难表示,与要对多对多关系进行转换(实际在ER图中已经转换),新建一个额外的表,存储多对多关联,将多对多关联分解为两个一对多关联,例如用户和组局之间的多对多关系,新增组局人员表对多对多进行转换,变为两个一对多的关系。

以上两种处理思路解决了系统的一对多和多对多约束。

为了符合一些行业规范,在各个表中新增加了gmt_create,gmt_modified对记录创建时间和最近一次修改时间进行了存储。还增加了deleted属性用于实现逻辑删除功能,方便后台管理查看记录。

  • 用户表
名称 解释
admittedYear 毕业年份
birthday 出生年月
certificateImageUrl 用户证件照
city 城市
deleted 逻辑删除
gmtCreate 创建时间
gmtModified 修改时间
id 用户ID(使用微信提供的openID)
isGraduated 是否毕业
province 省份
rpValue 人品值
school 用户学校
sex 性别(0为女,1为男,2为无)
status 用户状态(0为未审核,1为已审核)
userIconUrl 用户头像
username 用户名

用户表

  • 管理员表

管理员表

  • 黑名单表
名称 解释
beUserId 被拉黑用户ID
deleted 逻辑删除
gmtCreate 创建时间
gmtModified 修改时间
id 黑名单ID
userId 用户ID

黑名单表

  • 组局表
名称 解释
deleted 逻辑删除
description 组局描述
gmtCreate 创建时间
gmtModified 修改时间
id 组局ID
imageUrls 图片url链接
partyTypeId 组局类型ID
peopleCnt 组局人数限定
publisherId 发布者ID

组局表

  • 组局评论表
名称 解释
deleted 逻辑删除
gmtCreate 创建时间
gmtModified 最近一次修改时间
id 组局评论ID
idFrom 评论者ID
information 内容
partyId 对应组局ID
preId 父评论ID
status 评论状态0(正常状态),1(举报过多被挂起),2(已被删除)

组局评论表

  • 组局成员表
名称 解释
deleted 逻辑删除
gmtCreate 创建时间
gmtModified 最近一次修改时间
id 组局参与表ID
participantId 参与者ID
partyId 对应组局ID

组局成员表

  • 组局类型表
名称 解释
deleted 逻辑删除
gmtCreate 创建时间
gmtModified 最近一次修改时间
id 组局类型ID
name 组局类型名

组局类型表

  • 帖文表
名称 解释
deleted 逻辑删除
gmtCreate 创建时间
gmtModified 最近一次修改时间
id 帖文ID
imageUrls 帖子图片URL
message 帖子文本内容
postTypeId 帖子类型ID,外键
publisherId 发布者ID,外键
status 帖子状态:0(正常状态),1(举报过多被挂起),2(已被删除)

帖文表

  • 帖文评论表
名称 解释
deleted 逻辑删除
gmtCreate 创建时间
gmtModified 最近一次修改时间
id ID
idFrom 发布评论用户ID,外键
message 内容
postId 所属帖子ID,外键
preId 所属评论ID,外键
status 评论状态:0(正常状态),1(举报过多被挂起),2(已被删除)

帖文评论表

  • 帖文审核表
名称 解释
deleted 逻辑删除
gmtCreate 创建时间
gmtModified 最近一次修改时间
id ID
idFrom 发布评论用户ID,外键
postId 所属帖子ID,外键

帖文审核表

  • 帖文收藏表
名称 解释
deleted 逻辑删除
gmtCreate 创建时间
gmtModified 最近一次修改时间
id ID
idFrom 关注用户ID,外键
postId 帖子ID,外键

帖文收藏表

  • 帖文赞赏表
名称 解释
deleted 逻辑删除
gmtCreate 创建时间
gmtModified 最近一次修改时间
id ID
idFrom 发布评论用户ID,外键
postId 赞赏用户ID,外键
amount 赞赏数量

帖文赞赏表

  • 帖文类型表
名称 解释
deleted 逻辑删除
gmtCreate 创建时间
gmtModified 最近一次修改时间
id ID
name 帖子类型名
pre_id 帖子类型父类ID,外键

帖文类型表

  • 私聊表
名称 解释
deleted 逻辑删除
fromId 发送用户ID
gmtCreate 创建时间
gmtModified 修改时间
id 私聊ID
message 私聊信息
toId 接收用户ID

私聊表

  • 举报表
名称 解释
deleted 逻辑删除
gmtCreate 创建时间
gmtModified 最近一次修改时间
id ID
userId 举报用户ID,外键
postId 被举报帖子ID,外键

举报表

  • 树洞表
名称 解释
deleted 逻辑删除
fromId 用户ID
gmtCreate 创建时间
gmtModified 修改时间
id 树洞ID
message 树洞内容

树洞表

类图

UML 类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。一个好的类图设计能够给编码开发一个好的开始。我们按照系统的功能模块划分,将类图设计部分分为4个部分单独设计(用户部分、管理员部分、贴文部分和组局部分),之后进行整合。当然,能够这样进行划分设计的前提是各个模块之间的关联并非很多,往往只是一个模块和另一个模块中的某个类有关联。所以,模块化的好处在于能够更清晰地发现类和拟定类的方法,并且不至于使类图过于庞大而影响最终的阅读。

我们在类图设计中结合了开发阶段所利用的语言、框架、操作系统等等因素。在这些开发环境的基础上组织我们的类。依据SpringBoot框架,我们将类分为Model,Dao,Service和Controller四大部分。其中,Model是系统中的实体类,负责规范数据结构,方便数据的传输和使用;Dao部分则为与数据库交互的接口,一个Model往往对应一个Dao;Service类则是系统的处理核心,负责起系统的大部分计算;Controller类则为前端提供接口。我们遵循设计为开发原则,杜绝无用功。

此外,我们在类图中加入了包,是类图组织有序,更易于观看

用户类图

用户类图

发帖类图

发帖类图

组局类图

组局类图

管理员类图

管理员类图

系统安全

不同需求对安全产生不同的定义,安全对我们来说就是数据安全,即数据不被窃取,数据不被篡改,数据不被伪造。安全设计的核心是信任域的划分,而基于安全域的原子权限则是数据的坚实保护。原子权限正是这次安全设计的核心思路。

系统(平台)层面的安全

软件运行所需的基础环境既是此处的系统,包括以下内容:操作系统,WEB服务器中间件,软件运行所需的程序语言环境。

在这个层面主要从这几个方面进行防护:

  • 最小服务,通过减少与外界的接触面来降低入侵发生的可能性,只开放必要的服务端口
  • 安全版本,使用各种应用的最新stable版本来防止入侵
  • 合理的iptables设置,通过设置严格的出网规则来提高入侵的成本和难度
  • 合理的配置,对于各种应用的配置不应当直接复制网上的demo,而应该了解每一个配置会产生的行为后进行设计
  • Firewall的配置,禁止所有非TCP通信
  • 安装安全软件识别已有特征的恶意软件和行为
  • 根据入侵常用手段配置蜜罐,使得我们有可能在被入侵的时候得知
  • 数据与程序环境的分离,保证在得到程序环境的时候无法直接得到数据,对各种密钥进行加密
  • 合理的文件系统权限配置,保证得到网站权限无法修改网站代码

框架层面的安全

框架层面的安全即我们为了快速开发使用的框架

在这个层面从以下方面做好防范:

  • 不要从网上copy配置项,应当了解每一个配置会产生的行为,再进行框架的设置
  • 对于自己所使用的框架接口应当清楚会产生怎样的行为,而不是关注会产生怎样的结果
  • 在使用框架开发时应对开发环境和生产环境进行区分,在生产环境去除一切其他不必要的功能,比如报错

代码层面的安全

在开发时我们应当遵守以下简单的规则进行安全防护:

  • 简单了解owasptop10 后进行开发
  • 使用框架提供的或团队提供的安全操作函数
  • 在代码开发时应遵守OWASP安全编码指南
  • 对所有web接口进行
  • 在代码上线前使用白盒安全扫描工具进行测试,比如codeql
  • 一切用户资源文件都上传至OSS中

传输层面的安全

在数据传输我们使用以下方法进行防御:

  • 部署CDN防止发现真实IP
  • 负载均衡增加入侵难度
  • 部署云WAF防御恶意攻击
  • 配置访问频率防止DDOS和拆解攻击
  • 使用HTTPS加密传输数据
  • 前端对敏感数据比如密码使用ECDH密钥交换+AES加密

客户端层面的安全

在客户端层面我们要做好以下防护:

  • Csrf token 防止跨站请求伪造
  • 验证码防止暴力拆解,资源滥用
  • CSP防止恶意js脚本
  • Httponly防止cookie窃取

安全设计结构图

处于成本考虑,以docker 为单元进行服务隔离

以docker 为单元进行服务隔离

权限设计

权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是对不同的人访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,隐私数据泄露等问题。

迄今为止最为普及的权限设计模型是RBAC 模型,基于角色的访问控制。由于我们的记账系统是为已注册登录的用户提供服务

页面权限

  • 普通用户 : 校友圈页面,个人页面,拼局页面
  • 认证用户:校友圈页面,个人页面,拼局页面
  • 管理员用户:认证验证页面,组局验证页面,贴文验证页面

功能权限

  • 普通用户:修改个人资料,查看校友圈内容,参与个人认证,参与签到
  • 认证用户:修改个人资料,查看校友圈内容,参与个人认证,查看消息,发送帖子,发起组局,匿名帖文,参与签到
  • 管理员用户:通过验证,不通过验证

遗留问题

审核机制

手动写自动筛选功能,管理员在后期可以对这些帖文组局进行再筛查,从而做到自动化。同时发布相关公约约定,一旦发现违规行为将进行封号处理

认证机制

考虑到认证机制的要素过多但是同时不保证人员虚假,我们选择使用拍摄学生证上传,同时增强对数据方面的保护,保证人员的简单性

匿名功能

匿名功能没有作为我们的主打功能,但是是存在在我们的系统功能当中的,匿名发布消息需要消耗一定的人品值

本次作业贡献

学号 工作内容 贡献度
221801104 项目功能思维导图及分析 10.2
221801125 文档归纳,ppt,博客园文档 11.6
221801209 系统安全性分析,系统权限分析 10.4
221801215 类图,接口文档,数据库表,ER图 11.9
221801222 类图,接口文档,数据库表,ER图 12.1
221801230 数据流图,项目规划 10.4
221801231 功能模块层次图,接口文档 11.3
221801321 类图包图,接口文档,数据库表,ER图 11.8
221801411 泳道图 10.3

链接

在线链接

github仓库

逐梦校友圈_系统设计说明书.pdf

逐梦校友圈_数据库设计说明书.pdf

逐梦校友圈_系统设计和数据库设计答辩PPT

posted @ 2021-04-23 16:32  逐梦校友圈  阅读(401)  评论(6编辑  收藏  举报