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

Spring Boot实现项目管理应用User/Project/Task/Role关联及API调用咨询

实体关联关系设计

你这套场景需要新增一个中间关联表ProjectUser来绑定用户、项目、角色三者的关系,避免同一个用户在不同项目的角色冲突,四个核心实体+中间表的关联逻辑如下:

  • Role:角色字典表,预设3种固定角色:全局管理员、项目经理、项目普通成员,无动态增删需求
    • 与ProjectUser为一对多关联:一个角色对应多条项目成员分配记录
  • User:系统用户表,存储用户基础账号信息
    • 与ProjectUser为一对多关联:一个用户可加入多个项目,在不同项目拥有不同角色
    • 与Task为一对多关联:一个用户可被分配多个任务,也可作为创建人创建多个任务
  • Project:项目表,存储项目基础信息
    • 与ProjectUser为一对多关联:一个项目下可添加多个成员
    • 与Task为一对多关联:一个项目下可创建多个任务
  • ProjectUser:中间关联表,核心存用户在指定项目的角色,设置project_id + user_id联合唯一约束避免重复分配
    对应的JPA实体核心注解示例:
    @Entity
    @Table(uniqueConstraints = {@UniqueConstraint(columnNames = {"project_id", "user_id"})})
    public class ProjectUser {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        @ManyToOne
        @JoinColumn(name = "project_id", nullable = false)
        private Project project;
        @ManyToOne
        @JoinColumn(name = "user_id", nullable = false)
        private User user;
        @ManyToOne
        @JoinColumn(name = "role_id", nullable = false)
        private Role role;
    }
    
  • Task:任务表,存储任务基础信息
    • 关联Project外键:标记任务所属项目
    • 关联User的creator_id外键:标记任务创建人(对应项目经理)
    • 关联User的assignee_id外键:标记任务执行人(对应项目普通成员)

API设计与调用规范

采用RESTful风格设计,所有接口需先调用登录接口POST /api/auth/login获取JWT凭证,后续请求在Header中携带Authorization: Bearer ${token},后端通过拦截器解析当前登录用户身份做权限校验:

管理员专属接口(仅全局管理员可调用)

  • 创建项目:POST /api/admin/projects,请求体携带项目名称、描述等基础信息
  • 项目分配成员:POST /api/admin/projects/{projectId}/members,请求体携带用户ID、角色ID(仅支持传入项目经理/普通成员角色ID)
  • 移除项目成员:DELETE /api/admin/projects/{projectId}/members/{userId}

项目经理专属接口(仅对应项目的项目经理可调用)

  • 创建项目任务:POST /api/pm/projects/{projectId}/tasks,请求体携带任务名称、描述、截止时间、执行人ID
  • 编辑任务信息:PUT /api/pm/projects/{projectId}/tasks/{taskId}
  • 删除任务:DELETE /api/pm/projects/{projectId}/tasks/{taskId}
  • 查询项目下所有成员:GET /api/pm/projects/{projectId}/members,用于分配任务时筛选可选执行人

通用接口(所有登录用户可调用,返回数据按权限自动过滤)

  • 查询我参与的项目列表:GET /api/user/projects,管理员返回所有项目、项目经理返回自己负责的项目、普通成员返回自己加入的项目
  • 查询我的任务列表:GET /api/user/tasks,支持按项目ID、任务状态筛选
  • 修改任务状态:PUT /api/user/tasks/{taskId}/status,仅任务所属执行人可调用

权限校验核心逻辑:调用接口时先判断用户全局角色,如果是管理员直接放行;如果是项目经理,校验其是否为当前操作项目的项目经理;如果是普通成员,仅允许操作自己所属的任务和项目数据,避免越权。

内容的提问来源于stack exchange,提问作者u.altintas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:54:04