README.md
这个作业属于哪个课程 | 软件工程实践-2023学年-W班 |
---|---|
这个作业要求在哪里 | 团队作业 概要设计和数据库设计 |
这个作业的目标 | 完成项目系统设计和数据库设计 |
其他参考文献 | 《构建之法》 |
@[toc]
附录
GitCode仓库链接
成双成队_GitCode团队仓库
文档链接
成双成队_系统设计说明书
成双成队_数据库设计说明书
成双成队_系统设计和数据库设计答辩PPT
一、系统和数据库设计
1、系统设计
1.1、体系结构设计
访问层:请求服务的PC端或是客户端。
前端UI:使用vue对页面进行渲染。
控制层:响应用户请求,通过判断请求类型,负责接收前端传来的数据和返回数据。
服务层:存放业务逻辑处理,有对功能模块处理的方法,其中有对数据库处理操作的接口和实现方法,注意不是直接是数据库联系,是通过数据层来联系。
数据层:把数据放在持久化的介质中,还有增删改查的操作。
数据库:使用MySQL,Redis。
基础设施:具有服务器、网络设备、操作系统和存储设备。
1.2、功能模块层次图
1.2.1 前台功能模块层次图
1.2.2 前台功能模块介绍
登录模块
- 输入用户ID和密码正确以后进入主页。
- 输入用户ID或密码错误后生成输入错误的提示。
注册模块
- 从登录界面点击注册按钮后进入注册界面,在注册界面输入用户名、密码和确认密码后完成注册并生成返回登录界面的按钮。
个人主页模块
- 可以在个人主页进行身份认证,通过学信网认证之后,可以对他人发表的内容进行点赞评论等。
- 可直接查看关于自己基本信息、发帖、评论、粉丝、关注、消息通知和获赞数等。
- 可删除自己发布的评论。
- 可直接对自己的投稿进行编辑与删除。
- 可编辑个人资料,进行修改昵称、性别和个性签名等个人信息。
- 出于安全性考虑,在对个人信息展示部分,增加了隐私设置,其中可以设置个人主页访问权限、在个人中心是否展示用户发布的帖子和在个人中心是否展示用户的评论。
- 在经过验证身份之后,可以进行修改密码。
- 退出登录功能。
动态模块
- 可以直接在动态界面查看已关注好友发布的帖子。
- 可以进行举报,取消关注等操作。
查看用户模块
- 通过点击其他用户头像进入查看用户信息的界面。
- 如果具有访问该用户主页的权限,则可以查看该用户的个人信息主页。在他人主页展示的内容中,若该用户设置允许访问发布的帖子和评论的话,也可以在该用户个人主页看到。此外,还有还可以查看该用户的的粉丝、关注和获赞数。
- 在该用户的个人页面中可以进行关注/取消关注/举报操作。
投稿模块
- 对投稿模块的操作首先得先通过学信网的认证,才能在投稿模块操作。
- 投稿与寻找搭子、提出问题/分享经验和悄悄话树洞有关的帖子。在以上提到的几个选项发帖界面中输入标题、正文、二级标签、选择一级标签、表情和上传图片。
- 上传文件资源,其中包含了上传文件需要的新建文件夹路径和文件名字,选择上传文件途径。
- 投稿后,需等待审核,审核过后会有消息通知。
内容模块
- 具有分页功能。
- 具有今日推荐的板块。
- 在资源中心可以进行搜索选择相应的资源进行下载。
- 在主页中分区查看今日推荐、搭子派对、资源中心和悄悄话小树洞内容,还可以通过标签进行查看,对搭子派对和资源中心可以按分类查看内容。
- 悄悄话小树洞中可以匿名发布帖子。
- 在通过学信网认证之后,可以对他人发表的内容进行点赞评论。
- 今日推荐、搭子派对、资源中心和悄悄话小树洞内容中,用户可以通过热度/发布时间来进行排序浏览。
- 在界面中有搜索框,可以通过关键字匹配来搜索到答案。
- 对于不良的帖子或资源信息,用户可以使用举报功能进行举报。
帖子详情模块
- 可以查看帖子发布的具体相关内容与评论内容。
- 查看评论数、点赞数等。
- 能够进行点赞、评论、标记为有用等操作。
- 可以直接查看用户的联系方式。
- 有违规内容时可以进行举报。
1.2.3 后台功能模块层次图
1.2.4 后台功能模块介绍
登录模块
- 作为后台管理系统的主要入口
- 用于管理员输入用户名与密码进行身份验证
用户管理模块
- 可查询指定用户ID的详细信息,包括用户名、账号状态(正常、异常、封禁)及用户认证状态(未认证、已认证)
- 可永久移除用户的账户
- 对用户账号状态进行调整,如将正常用户标记为异常、封禁违规用户或恢复被误封禁的用户
账号信息管理模块
- 用于修改管理员账号的用户名与密码
管理员管理模块
- 可查询指定管理员ID的详细信息
- 可创建新管理员账号,并赋予初始权限值
- 对管理员的权限值进行更新,包括创世者权、帖子管理权、评论权、资源管理权、用户管理权、总审核权。
- 可永久移除管理员的账户
投稿管理模块
- 可查询指定帖子与资源的详细内容,便于审核内容是否符合平台规范
- 当发现用户投稿违反平台规定时,管理员可删除用户的投稿
- 用于对用户上传的投稿以及申请的文件夹进行审核操作
评论管理模块
- 用于管理员查阅特定评论的详细内容,以便处理争议或识别潜在违规行为
- 针对含有违法内容或其他不适宜展示的评论,管理员可将其从平台上移除
- 与投稿审核类似,用于对用户发表的评论进行审核操作,确保评论内容符合平台规范
举报内容管理模块
- 查询指定举报信息ID的详细内容。
- 对举报内容进行适当的处理,判断被举报的内容是否违规,并对违规内容进行删除,处理完成后给举报用户和被举报用户(或对象所属的用户)发送消息
2、数据库设计
2.1、ER分析
- 根据类图我们确定了主要的实体,我们设定了卡片,用户,封禁用户,举报,评论,资源,隐私设置,模块,列表项,信息,管理员,粉丝列表,关注列表,评论点赞,卡片点赞,系统信息,学信网认证信息共17个的实体,其次我们分析了各个实体之间的关系,关系如下:
- user可以发布多个card;
- user通过report多次举报多个card并记录;
- user设置privacy_settings;
- user可以接收多个message;
- user只能查看一个fanlist;
- user只能查看一个focuslist;
- user被封禁成为banned_user,可以被封禁多次;
- user通过学信网认证并记录在ain_imformation,有且只有一个认证信息;
- user通过card_like(一次)点赞(多个)card并记录;
- user通过comment_like(一次)点赞多个comment并记录;
- user通过comment多次评论多个card或comment并记录;
- user对应多个list_item;
- fanlist包含多个list_item;
- focuslist包含多个list_item;
- administrator管理多个resource;
- administrator管理多个comment;
- administrator管理多个user;
- administrator管理多个report;
- administrator通过role赋予权限(每个管理员只能是一个角色);
- module包含resource即资源中心模块;
- module包含card即(非匿名的找搭子模块和匿名的悄悄话小树洞模块);
- 得到了最终的er关系图:
2.2、表结构设计
二、UML图和接口设计
1、UML图
1.1、用况图
1.2、类图
2、接口设计
三、系统安全和权限分析
1、系统安全
- 在用户注册时,客户端向服务端传输用户输入的原密码,然后服务端对接收到的原密码进行加密,通过对原密码拼接一个随机数后得到的字符串进行哈希算法处理,得到一个新密码,将用户id、新密码和随机数存入数据库中
- 在用户登录时,客户端向服务端传输用户输入的用户id和密码,服务端获取到用户的id和密码后,根据用户id从数据库中取出该用户的新密码和随机数。把用户传过来的密码和随机数进行拼接处理后,得到一个新的字符串,将新字符串交给哈希算法处理将得到一个处理结果。如果处理后的结果和数据库中存储的新密码相同,那么,该用户传过来的密码是正确的,登录成功,否则,登录失败。
- 在<悄悄话小树洞>功能处,用户选择匿名发表,在用户自己的<我的>可以用自己的用户id看到自己发表的匿名聊天;而在主页查看时,服务端向客户端以是否该贴为匿名为条件,选择是否向客户端传输用户id,如果不传输,则将用户id改为一个公共的未知id。
- 在<资源中心>功能处,用户只允许在<投稿中心>处修改属于自己的文件,对其他人的文件只允许下载和查看,无法进行修改,而如果需要创建和修改文件夹,用户需要向管理员申请,申请通过后才能在该文件夹内进行上传文件等操作。
- 对于管理员的审核功能,设置通过与不通过两个按钮,点击设置审核状态,隐藏通过与不通过按键,显示退回按键,以免管理员的误触操作后无法修改。
- 对用户的输入以及操作的数据进行加密,防止报文明文传输;再进行数据加签验签,保证数据在传输过程中不被篡改;使用时间戳timestamp超时机制,防止用户数据被抓包进行恶意请求
- 对用户的输入进行参数校验,如发帖时的标题和内容等;通过参数化进行查询,避免参数和查询句拼接,避免出现SQL注入;避免出现XSS,在数据输入输出时做好字符转换,使恶意代码不被执行,而是解析成字符
2、权限设计
2.1 游客与普通用户权限(游客相当于未登录状态)
- 仅允许浏览帖子和查看文章详细内容,无法进行其他操作。
- 普通用户允许在自己的主页进行修改个人信息以及实名认证等操作。
2.2 会员权限(会员即通过实名认证的用户)
-
<主页>:允许浏览文章(帖子),查看详情,对文章进行评论、点赞、对发表改文章的用户进行关注,或者对改文章进行举报。还可以对文章的评论进行第二次评论,或者对文章的评论进行点赞和举报(点赞和举报都只能一次)。对自己发布的评论可以进行删除。
-
<资源中心>:可以下载资源文件和浏览资源文件。
-
<投稿中心>:可以发布相应模块的帖子,帖子可以设置标签,添加表情,添加图片(相当于一个富文本编辑器);可以向管理员申请增加文件夹,申请时需要有申请理由;可以向某个文件夹上传文件,或者文件夹的压缩包。支持多文件同时上传。
-
<我的>:可以对自己的个人信息进行修改;可以查看自己关注的人以及关注自己的人,并可以通过点击用户名进入他的主页;可以对自己发布的帖子和评论进行查看、修改和删除;可以设置隐私权限。
2.3 异常状态用户(因发表不正当言论被举报的用户)
- 与普通用户相同,仅允许浏览帖子和查看文章详细内容,无法进行其他操作。
- 普通用户允许再自己的主页进行修改个人信息等操作。
2.4 管理员权限
- 帖子管理权限:对发表的帖子进行审核、删除操作。
- 评论管理权限:对发表的评论进行审核、删除操作。
- 资源管理权限:对上传的文件进行审核、删除操作;对用户申请增加的文件夹进行审核操作;对文件夹进行修改,添加,删除操作。
- 用户管理权限:对用户进行管理,对可以查看用户信息除实名信息,密码以外的其他个人信息;可以对用户进行删除。
- 举报处理权限:对举报内容进行审核,如若情况属实,对被举报的内容进行删除;对发表该内容的用户进行警告,并将该用户手动设置为异常状态,设置异常时间;如果收到多个对同一个用户的举报信息,对该用户手动进行封禁处理(封禁用户相当于游客,无法登录,如果需要解封,需要向官方邮箱发送邮件进行申请),设置封禁时间;以及对于某些用户的恶意举报,对其也进行手动设置异常处理,若依旧多次恶意举报,同样进行手动封禁处理,设置封禁时间。
- 恢复异常状态的用户权限:对于改正态度良好,符合恢复要求的用户进行恢复其用户状态为正常的操作。如若恢复异常状态的客户再次被举报,情况属实,直接进行封禁处理,设置封禁时间。
- 管理员管理权限:可以添加,删除,修改管理员。
3、 管理员角色
- 帖子管理员:拥有帖子管理权限,举报处理权限,恢复异常状态的用户权限。
- 评论管理员:拥有评论管理权限,举报处理权限,恢复异常状态的用户权限。
- 资源管理员:拥有资源管理权限。
- 用户管理员:拥有用户管理权限,举报处理权限,恢复异常状态的用户权限。
- 创世者:拥有帖子管理权限,评论管理权限,资源管理权限,用户管理权限,举报处理权限,恢复异常状态的用户权限,管理员管理权限。仅开发者享有。
四、改进分析
1、改进部分
- 用户类操作存在错误,将actor能执行的用力直接作为actor类的操作。
- 学籍信息类中学号属性的类型不够恰当。
- 没有保存点赞信息,无法判断用户是否点过赞,存在用户可能反复刷赞的问题。
2、改进过程
- 我们将这些操作从用户类中移除,并将这些操作分配到相对应的类中,让actor去调用相关类的这些操作而不是将其直接作为actor类的操作,避免其他类内部暴露的问题。
- 我们已经将学号的类型从Long改为String,避免出现学号开头为0导致需要额外处理的情况。
- 我们增加了一个点赞表来存储用户的点赞记录,在用户加载相应内容时查询点赞表,当用户点赞时,如果表中已经存在相关点赞记录,则将已存在的点赞取消,同时删除表中的该条记录,保证用户只能对同一条内容或是评论进行一次的点赞交互,防止用户重复点赞。
- 我们还对类图进行了检查与进一步完善,填补了一些之前缺漏的地方。
五、团队绩效
1、工作流程
- 线上会议进行整体设计与成员分工,划分为四个小组:系统结构与功能模块设计、数据库、UML与接口、安全与权限,四个小组同步进行任务。
- 小组按分工完成任务,产生疑问进行线上交流。
- 小组工作对接,对产出内容进行检查。
- 使用腾讯文档进行文档同步协作撰写。
- 采用Git进行博客分部分撰写。
2、团队成员分工 & 贡献度比例
学号 | 工作内容 | 贡献度 |
---|---|---|
222100116 | 数据库设计、数据库设计说明书 | 11.84% |
222100117 | ER分析与数据库设计、数据库设计说明书 | 15.51% |
222100123 | 系统体系结构设计、系统设计说明书 | 13.88% |
222100125 | 接口设计、系统设计说明书 | 16.33% |
222100131 | 功能模块设计、系统设计说明书 | 13.06% |
222100417 | 系统安全与权限设计、系统设计说明书 | 13.47% |
222100420 | UML设计、PPT制作、系统设计说明书 | 15.92% |
六、开发计划安排
1、预期开发计划时间安排
周数 | 里程碑 |
---|---|
第一周(4.24-5.1) | 前后端知识框架学习,完成UI设计,后端完成框架搭建,数据库建立并导入测试数据,前端基本完成前台模块中的首页展示模块,后端基本实现相关接口 |
第二周(5.2-5.8) | 前后端继续实现其他模块,包括用户的登录注册等基本功能 |
第三周(5.9-5.15) | 前后端对接,服务器部署,前后端的开发文档的编写,准备Alpha冲刺答辩 |
2、预期开发计划分工安排
成员 | 角色 | 详细开发部分 |
---|---|---|
222100116林雄 | 后端 | 后端开发 |
222100117欧裕强 | 数据库管理、后端 | 数据库搭建、调整与数据管理,后端开发 |
222100123姚磊 | 后端、文档 | 后端开发,后端开发文档撰写 |
222100125钱元城 | 项目经理、前端、测试 | 跟踪项目进度,前端开发,项目测试 |
222100131曾劲 | UI设计、前端、测试 | UI设计,前端开发,项目测试 |
222100417余承烨 | 前端、文档、测试 | 前端开发文档撰写,前端开发,项目测试 |
222100420陈佳伟 | 开发经理、服务器部署、后端 | 前后端对接,服务器配置和项目部署,后端开发 |