从代码到界面:Auto-Novel评论删除功能的完整实现解析

从代码到界面:Auto-Novel评论删除功能的完整实现解析

【免费下载链接】auto-novel 轻小说机翻网站,支持网络小说/文库小说/本地小说 【免费下载链接】auto-novel 项目地址: https://gitcode.com/GitHub_Trending/au/auto-novel

在轻小说阅读平台中,评论系统是用户互动的重要组成部分,而评论删除功能则是维护社区秩序的关键一环。Auto-Novel作为支持网络小说、文库小说和本地小说的轻小说机翻网站,其评论删除功能实现了严格的权限控制与流畅的用户体验。本文将从后端API设计到前端交互实现,全面解析Auto-Novel项目中评论删除功能的技术细节。

功能架构概览

Auto-Novel的评论删除功能采用前后端分离架构,通过Kotlin后端提供RESTful API,Vue3前端实现用户交互界面。功能核心包含三大模块:

  • 权限控制模块:区分普通用户与管理员权限,限制删除操作范围
  • API接口模块:提供安全的评论删除HTTP端点
  • 前端交互模块:实现用户友好的删除确认与反馈流程

评论删除功能架构

相关核心文件路径:

后端权限控制机制

评论删除功能的安全性核心在于严谨的权限验证。在Auto-Novel后端实现中,权限控制通过双重校验机制实现:

用户身份验证流程

// [server/src/main/kotlin/api/RouteComment.kt] 权限验证核心代码
suspend fun deleteComment(
    user: User,
    id: String,
) {
    // 管理员权限检查或评论作者验证
    if (!(user.role atLeast UserRole.Maintainer) && 
        !commentRepo.isCommentCanRevoke(id = id, userId = user.id)) {
        throwUnauthorized("只有评论作者才有权限删除")
    }
    val isDeleted = commentRepo.deleteComment(id)
    if (!isDeleted) throwNotFound("评论不存在")
}

这段代码实现了两个关键验证:

  1. 用户角色检查:管理员(Maintainer及以上角色)拥有删除任意评论的权限
  2. 评论归属验证:普通用户只能删除自己发布的评论

时间窗口限制

前端实现中还增加了时间限制,普通用户只能删除24小时内发布的评论:

// [web/src/components/comment/CommentItem.vue] 时间限制逻辑
const isDeletable = computed(() => {
  return (
    whoami.value.asAdmin ||
    (whoami.value.isMe(props.comment.user.username) &&
      Date.now() / 1000 - props.comment.createAt < 3600 * 24)
  );
});

这种双重限制既保障了用户对自己内容的管理权限,又防止了恶意删除历史评论的行为。

API接口设计与实现

RESTful删除端点设计

Auto-Novel采用RESTful设计风格,为评论删除功能提供专用端点:

// [server/src/main/kotlin/api/RouteComment.kt] 删除接口路由定义
delete<CommentRes.Id> { loc ->
    val user = call.user()
    call.tryRespond {
        service.deleteComment(user = user, id = loc.id)
    }
}

该路由定义了DELETE /comment/{id}端点,通过路径参数接收评论ID,由deleteComment方法处理实际删除逻辑。

数据库操作实现

评论删除最终通过MongoDB数据库操作完成:

// [server/src/main/kotlin/api/RouteComment.kt] 数据库删除操作
val isDeleted = commentRepo.deleteComment(id)
if (!isDeleted) throwNotFound("评论不存在")

commentRepo.deleteComment方法封装了具体的数据库删除逻辑,返回操作结果用于验证删除是否成功。

前端交互实现

删除按钮条件渲染

前端根据权限动态显示删除按钮:

<!-- [web/src/components/comment/CommentItem.vue] 删除按钮条件渲染 -->
<c-button-confirm
  v-if="isDeletable"
  hint="真的要删除评论吗?"
  label="删除"
  :icon="DeleteOutlined"
  require-login
  quaternary
  type="tertiary"
  size="tiny"
  style="margin-right: 4px"
  @action="deleteComment()"
/>

v-if="isDeletable"指令控制按钮可见性,只有满足权限条件的用户才能看到删除按钮。

删除确认与反馈流程

删除操作通过二次确认防止误操作:

// [web/src/components/comment/CommentItem.vue] 删除功能实现
function deleteComment() {
  doAction(
    CommentRepo.deleteComment(props.comment.id, props.site, props.parentId),
    '删除',
    message,
  );
}

doAction函数封装了API调用、加载状态显示和操作结果反馈,提供一致的用户体验。

评论删除状态更新

成功删除后,前端通过响应式数据更新立即反映删除结果,无需页面刷新:

// [web/src/repos/useComment.ts] 评论删除API调用
async function deleteComment(id: string) {
  return client.delete(`/comment/${id}`);
}

API调用成功后,Vue的响应式系统自动更新评论列表,移除已删除的评论项。

安全与用户体验优化

防误删机制

系统通过多重机制防止误删除操作:

  1. 删除前二次确认对话框
  2. 清晰的操作提示文本("真的要删除评论吗?")
  3. 操作结果反馈提示

删除确认对话框

错误处理策略

后端实现了完善的错误处理机制:

// [server/src/main/kotlin/api/RouteComment.kt] 错误处理
if (!isDeleted) throwNotFound("评论不存在")

当前端调用删除API时,可能收到的错误响应包括:

  • 401 Unauthorized:权限不足
  • 404 Not Found:评论不存在(可能已被删除)
  • 400 Bad Request:请求参数错误

前端统一处理这些错误并向用户显示友好提示:

// [web/src/components/comment/CommentItem.vue] 错误处理
doAction(
  CommentRepo.deleteComment(props.comment.id, props.site, props.parentId),
  '删除',
  message,
);

功能扩展:评论隐藏机制

除了彻底删除,系统还为管理员提供了评论隐藏功能作为更灵活的内容管理手段:

// [server/src/main/kotlin/api/RouteComment.kt] 评论隐藏功能
suspend fun updateCommentHidden(
    user: User,
    id: String,
    hidden: Boolean,
) {
    user.shouldBeAtLeast(UserRole.Maintainer) // 仅管理员可隐藏评论
    val isUpdated = commentRepo.updateCommentHidden(
        id = id,
        hidden = hidden,
    )
    if (!isUpdated) throwCommentNotFound()
}

隐藏功能与删除功能的区别在于:

  • 隐藏评论仅对普通用户不可见,管理员仍可查看
  • 隐藏操作可撤销,删除操作不可恢复
  • 隐藏不会从数据库中移除记录,便于数据统计和审计

相关实现代码:server/src/main/kotlin/api/RouteComment.kt

总结与最佳实践

Auto-Novel的评论删除功能实现遵循了以下最佳实践:

  1. 严格的权限控制:通过角色分级和资源归属验证确保操作安全
  2. 完善的错误处理:前后端一致的错误处理机制,提供清晰反馈
  3. 用户体验优化:二次确认、加载状态、操作结果提示等细节处理
  4. 代码模块化:功能实现分散在合适的代码层级,便于维护

功能实现过程中使用的核心技术栈:

  • 后端:Kotlin + Ktor + MongoDB
  • 前端:Vue3 + TypeScript + Naive UI
  • 通信:RESTful API + JSON

通过这些技术和设计决策,Auto-Novel实现了既安全又用户友好的评论删除功能,为轻小说阅读社区提供了良好的互动环境。

官方文档:README.md 功能测试用例:server/src/test/kotlin/infra/comment/ 社区讨论区:web/src/pages/forum/Forum.vue

【免费下载链接】auto-novel 轻小说机翻网站,支持网络小说/文库小说/本地小说 【免费下载链接】auto-novel 项目地址: https://gitcode.com/GitHub_Trending/au/auto-novel

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值