[r2cn] 从 monorepo 仓库读取到每一层级的 Cedar 配置,回显到 CL 的 reviewers 列表
[任务] 从 monorepo 仓库读取到每一层级的 Cedar 配置,回显到 CL 的 reviewers 列表
[任务分值] 30 分
[背景描述]
当前 Mega 系统 已经集成了 Cedar 策略引擎,用于实现基于策略的访问控制和审批规则。 在集成前,CL(Change List)的 reviewers 逻辑主要由用户在 UI 中手动指定,缺乏标准化的权限与规则来源。
在引入 Cedar 后,我们希望能让 代码仓库自身携带权限策略文件(如 .cedar 文件), 实现类似于 “代码即策略(Policy-as-Code)” 的机制,让审批流程能随仓库结构和代码变化而动态调整。
/ (根)
├── service_a/
│ ├── .cedar
│ └── src/...
├── service_b/
│ ├── submodule/
│ │ └── .cedar
│ └── src/...
└── common/
系统应能从对应 CL 涉及的目录中读取每一层的 Cedar 配置文件,并根据策略内容解析出应参与审核的人员列表(reviewers),在 UI 中自动展示。
[需求描述]
-
Cedar 文件加载机制 • 当 CL 创建时,Mega 后端根据该 CL 涉及的文件路径: • 从变更文件路径的上层目录开始逐级查找 .cedar 文件; • 直到仓库根目录或无更多配置文件为止; • 累积这些策略文件并进行合并解析; • 读取方式可通过已有的 git tree/blame 模块,从对应 commit 获取文件内容(支持 tag / branch)。
-
策略解析 • Cedar 文件中包含的策略可定义 reviewer 角色,例如:
permit(action == "code:review", principal, resource) when { resource.path.startsWith("service_a/") } to ["alice", "bob"];• 系统应能提取出策略中涉及的 principal(用户或角色)信息。
-
与 CL 关联 • 解析得到的 reviewers 列表应: • 存储在数据库中(cl_reviewers 表); • 并在前端 CL 页面回显; • 与手动添加的 reviewers 区分(例如标识为“由策略推荐”)。
-
策略合并规则 • 下层目录的 .cedar 文件优先级高于上层; • 如果多层策略文件都定义了相同的路径 reviewer,后者覆盖前者; • 允许多策略叠加(同一 CL 可以汇总多个 reviewer)。
-
前端展示 • CL 页面 reviewers 区域新增 “System Required” 标签; • System Required 的 reviewers 无法被移除。
[代码标准]
- 所有 PR 提交必须签署
Signed-off-by和 使用GPG签名,即提交代码时(使用git commit命令时)至少使用-s -S两个参数,参考 Contributing Guide; - 所有 PR 提交必须通过
GitHub Actions自动化测试,提交 PR 后请关注GitHub Actions结果; - 代码注释均需要使用英文;
[PR 提交地址] 提交到 mega 仓库的 main 分支 `` 目录;
[开发指导]
- 认领任务参考 r2cn 开源实习计划 - 任务认领与确认;
[导师及邮箱] 请申请此题目的同学使用邮件联系导师,或加入到 R2CN Discord 后在 #p-meta 频道和导师交流。
- Quanyi Ma [email protected]
- Tianxing Ye [email protected]
[备注]
- 认领实习任务的同学,必须完成测试任务和注册流程,请参考: r2cn 开源实习计划 - 测试任务 和 r2cn 开源实习计划 - 学生注册与审核
任务创建成功。
/request-assign
认领成功:等待导师审核,请及时联系导师进行审核。
/intern-approve
认领审核成功:已将该任务分配给学生。