You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于嵌套子对象删除父项目的正确方法及角色权限咨询

问题解决与角色设计建议

一、完成项目删除功能(管理员验证)

现有代码的问题在于:Project.find({ "users._id": userId })仅查询了所有包含当前用户的项目,既没有关联要删除的projectId,也没有验证该用户是目标项目的管理员(admin=true)。以下是修复后的完整代码:

修复后的代码

export const deleteProject = async (req: any, res: Response) => {
  const { _id: userId } = req.user;
  const projectId = req.params.id;

  try {
    // 1. 查找目标项目,同时验证当前用户是该项目的管理员
    const targetProject = await Project.findOne({
      _id: projectId,
      "users._id": userId,
      "users.admin": true
    });

    if (!targetProject) {
      return res.status(403).json({
        status: "Failed",
        message: "无权限删除该项目,你不是此项目的管理员"
      });
    }

    // 2. 执行删除操作
    const deletedProject = await Project.findByIdAndDelete(projectId);

    res.status(200).json({
      status: "Success",
      message: "项目已成功删除",
      data: deletedProject
    });
  } catch (err) {
    res.status(500).json({
      status: "Failed",
      message: "删除项目失败",
      error: err instanceof Error ? err.message : String(err)
    });
    console.error(err);
  }
};

代码说明

  • 使用findOne同时匹配projectId、当前用户ID和admin=true,确保只有目标项目的管理员才能执行删除
  • 若未找到符合条件的项目,返回403权限错误(400通常用于参数错误,此处用403更精准)
  • 删除成功后返回被删除的项目数据,便于前端同步状态
  • 错误处理中返回具体错误信息,方便调试排查

二、项目、工单及评论的用户角色处理建议

结合类Jira的场景,建议将角色分为5个层级,为每个模块分配对应权限:

1. 项目级角色与权限

角色权限说明
项目管理员项目全权限:删除/编辑项目、管理成员(添加/移除/改角色)、配置项目参数
项目经理管理所有工单:创建/编辑/删除工单、分配工单、设置优先级、查看全部工单
开发人员查看所有工单、编辑自己负责的工单、提交更新、添加评论
测试人员创建Bug工单、编辑自己提交的工单、验证工单状态、添加评论
访客仅查看公开项目的工单和评论,无编辑权限

2. 工单级权限控制

  • 创建权限:项目经理、测试、开发均可创建,访客不可
  • 编辑权限:工单创建者、负责人可编辑内容;项目经理可编辑所有工单
  • 删除权限:仅项目经理、项目管理员可删除工单
  • 状态变更:负责人可标记「进行中」「已完成」;测试可标记「待验证」「已关闭」

3. 评论级权限控制

  • 添加评论:所有项目成员(除访客)均可对工单添加评论
  • 编辑/删除评论:仅评论创建者、项目经理、项目管理员可操作
  • 可见性:仅项目成员可查看对应项目工单的评论,访客无权限

数据库设计优化建议

当前projects集合的users字段存储了admin和role,建议用枚举值统一管理role,避免硬编码数字:

// 定义角色枚举
enum ProjectRole {
  ADMIN = 3,
  MANAGER = 2,
  DEVELOPER = 1,
  TESTER = 0,
  GUEST = -1
}

权限判断时可直接写"users.role": ProjectRole.ADMIN,可读性更强。


内容的提问来源于stack exchange,提问作者Brrazzerss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 01:12:46