feat(profile): 开发者选项入口 — 密钥管理 + CONTRIBUTING 基础设施访问段#306
feat(profile): 开发者选项入口 — 密钥管理 + CONTRIBUTING 基础设施访问段#306longsizhuo wants to merge 3 commits intomainfrom
Conversation
和 AdminLinkIfOwnerAdmin 刻意分开:AdminLink 是 admin 专属入口,这个对所有登录 用户开放(只要访问的是自己主页)。对应的访问控制不在前端——Infisical 自己有 GitHub OAuth + project-level RBAC,非 admin 协作者登录后只看得到自己有权限的 secrets。 - 新加 DeveloperToolsIfOwner client 组件:owner 判定条件和 AdminLinkIfOwnerAdmin 保持一致(githubId 或 username 任一匹配即视为本人) - profile 页按钮栏里插在 AdminLink 前,顺序:编辑 → 密钥管理 → 管理员界面 → 排行 - data-umami-event 埋点 profile_devtools_secrets_click,方便看谁在用 - target=_blank 到 secrets.involutionhell.com(自托管 Infisical 实例)
新协作者进来要知道怎么登主站 / Infisical / pgAdmin,怎么申请 admin 角色, .env 文件的分布与规则。之前这些都在脑子里或散在 wiki 里,CONTRIBUTING 作为贡献指南得自带一份快速索引。 - 服务一览表:谁能进 / 登录方式 - admin 权限申请流程(别手工 insert user_accounts 踩孤儿坑) - .env 文件位置和为什么 prod/dev 故意不一样(链到 wiki changelog) - 个人主页的开发者自助入口说明 - Spring Boot 本地启动的 source .env 姿势(memory 里的 feedback_ih_backend_dev_start) 放在 🚀 开发环境 和 📚 文档规范 之间,让人 setup 完环境后紧接着看到。
CR 指出 '所有登录协作者可见' 有歧义——按钮实现只在本人访问自己主页时 渲染,路人和其他登录用户在别人主页上看不到。Infisical 站本身才是对所有协作 者开放。分清楚两层语义避免贡献者迷惑。
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
Pull request overview
为个人主页新增「开发者选项」入口(面向“已登录且访问本人主页”的用户),提供到 Infisical 密钥管理的快捷跳转,并在 CONTRIBUTING 中补充基础设施访问说明,帮助贡献者理解入口与权限申请方式。
Changes:
- 新增
DeveloperToolsIfOwner客户端组件:仅本人登录访问自己主页时展示“密钥管理 ↗”外链入口 - 在
/u/[username]顶部按钮栏按顺序插入“密钥管理”入口(编辑 → 密钥管理 → 管理员界面 → 排行) - 扩充
CONTRIBUTING.md的“基础设施访问”章节并整理部分 Markdown 空白格式
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
| app/u/[username]/page.tsx | 在个人主页按钮栏引入并渲染 DeveloperToolsIfOwner |
| app/u/[username]/DeveloperToolsIfOwner.tsx | 新增密钥管理入口组件(owner-only 渲染 + Umami 埋点 + 外链跳转) |
| CONTRIBUTING.md | 新增基础设施访问说明、权限申请/入口指引与部分排版修正 |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| href="https://secrets.involutionhell.com" | ||
| target="_blank" | ||
| rel="noopener noreferrer" | ||
| className="font-mono text-[11px] uppercase tracking-widest px-2 py-1 border border-[var(--foreground)] text-[var(--foreground)] hover:bg-[var(--foreground)] hover:text-[var(--background)] transition-colors font-bold" | ||
| data-umami-event="profile_devtools_secrets_click" | ||
| title="Infisical 密钥管理(GitHub OAuth 登录,按 project 权限查看)" |
There was a problem hiding this comment.
secrets.involutionhell.com 是 *.involutionhell.com 子域;而当前登录态会把 satoken 写成 Domain=.involutionhell.com 的非 HttpOnly cookie(见 lib/use-auth.tsx 的 syncTokenCookie)。这意味着用户点击这里会把站内会话 token 自动带到 secrets 子域,并可能被该子域上的前端脚本读取/泄露。建议:尽量把密钥管理放到不共享该 cookie 的独立域名,或将 satoken cookie 的 Domain 收窄到仅 api.involutionhell.com(专供 pgAdmin forward_auth 场景),避免扩大 token 暴露面。
| - 本地 dev: | ||
| - 后端:`involution-hell-project/backend/.env`(`set -a && . ./.env && set +a` 注入 Spring Boot) | ||
| - 前端:`involution-hell-project/frontend/.env` | ||
| - 生产:`/home/ubuntu/involution-hell/.env`(**只在部署机**,不在仓库里;CI 不覆盖) |
There was a problem hiding this comment.
这里新增的 .env 路径写的是 involution-hell-project/backend/.env、involution-hell-project/frontend/.env,但这些目录在当前仓库中不存在。建议明确说明这是“另一个仓库/部署目录”的路径并给出链接,或改为当前仓库的实际路径,避免贡献者照做找不到文件。
| - 本地 dev: | |
| - 后端:`involution-hell-project/backend/.env`(`set -a && . ./.env && set +a` 注入 Spring Boot) | |
| - 前端:`involution-hell-project/frontend/.env` | |
| - 生产:`/home/ubuntu/involution-hell/.env`(**只在部署机**,不在仓库里;CI 不覆盖) | |
| - 下面提到的本地 dev 路径是**外部工作区 / 联动项目目录**中的 `.env` 位置示例,**不是当前仓库内一定存在的目录**;如果你当前检出的就是本文档所在仓库,请不要在本仓库根目录下寻找 `involution-hell-project/` | |
| - 本地 dev: | |
| - 后端:`involution-hell-project/backend/.env`(外部工作区路径;`set -a && . ./.env && set +a` 注入 Spring Boot) | |
| - 前端:`involution-hell-project/frontend/.env`(外部工作区路径) | |
| - 生产:`/home/ubuntu/involution-hell/.env`(**只在部署机**,不在当前仓库里;CI 不覆盖) |
| - **密钥管理 ↗**(本人访问自己主页时可见) → 跳 Infisical | ||
| - **管理员界面**(仅 admin 本人访问自己主页时可见) → 跳 `/admin` | ||
| - **编辑**(仅本人访问自己主页时可见) → 跳 profile 编辑 | ||
|
|
||
| 三个按钮都走 "只有本人看自己主页时才渲染",路人和其他登录用户在这里看不到。 |
There was a problem hiding this comment.
“开发者自助入口”这里列出的按钮顺序与页面实际按钮栏顺序不一致:页面是“编辑 → 密钥管理 → 管理员界面 → 排行”(见 app/u/[username]/page.tsx),但文档这里把“编辑”放在最后。建议把列表顺序调整为与 UI 一致,减少读者困惑。
| - **密钥管理 ↗**(本人访问自己主页时可见) → 跳 Infisical | |
| - **管理员界面**(仅 admin 本人访问自己主页时可见) → 跳 `/admin` | |
| - **编辑**(仅本人访问自己主页时可见) → 跳 profile 编辑 | |
| 三个按钮都走 "只有本人看自己主页时才渲染",路人和其他登录用户在这里看不到。 | |
| - **编辑**(仅本人访问自己主页时可见) → 跳 profile 编辑 | |
| - **密钥管理 ↗**(本人访问自己主页时可见) → 跳 Infisical | |
| - **管理员界面**(仅 admin 本人访问自己主页时可见) → 跳 `/admin` | |
| - **排行** → 跳个人主页排行视图 | |
| 四个按钮里,**编辑**、**密钥管理**、**管理员界面**都走 "只有本人看自己主页时才渲染",路人和其他登录用户在这里看不到。 |
| cd involution-hell-project/backend | ||
| set -a && . ./.env && set +a # .env 里有 SERVER_PORT=8081 等 | ||
| ./mvnw spring-boot:run |
There was a problem hiding this comment.
这里的后端启动步骤 cd involution-hell-project/backend 指向的目录在当前仓库中不存在。建议补充说明后端代码所在仓库/目录与获取方式(或移除该段落),否则贡献者按文档操作会直接失败。
变更
代码
文档
与 AdminLinkIfOwnerAdmin 的区别