Skip to content

Commit 129f7d3

Browse files
authored
feat(admin): 泛化 /api/admin/devtool-check 给所有 admin-only 工具复用 (#14)
之前单名 /pgadmin-check 只给 pgAdmin 的 Caddy forward_auth 用,Umami 等未来 admin 面板也要同样的 "当前 session 是 admin 吗" 判定,再每加一个工具就多 一个 controller 没必要。 - 新加通用路径 /api/admin/devtool-check,语义相同(@SaCheckRole("admin")) - 原 /api/admin/pgadmin-check 保留做向后兼容,等 Caddyfile 全部切到 /devtool-check 再删 - 同文件注释补充:为什么 Infisical **不** 走这套(它有自己的 OAuth + RBAC) 配套 Caddyfile 改动在部署机单独落地,不在仓库里。
1 parent 981a3a3 commit 129f7d3

1 file changed

Lines changed: 23 additions & 8 deletions

File tree

src/main/java/com/involutionhell/backend/admin/controller/AdminInfraController.java

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,42 @@
99
/**
1010
* 管理员基础设施(非业务)辅助接口。
1111
*
12-
* 目前只有一个:/api/admin/pgadmin-check —— 专门给 Caddy `forward_auth` 调用,
13-
* 用来判断当前请求是否是 admin。通过就 200,否则 sa-token 自动抛 NotLogin /
14-
* NotPermission 异常,全局异常处理器转成 401 / 403,Caddy 据此拒绝代理到 pgAdmin。
12+
* 设计初衷:给 Caddy `forward_auth` 当鉴权目标,用最小代价把"这个请求是不是
13+
* admin"这个判断委托给后端 sa-token。所有需要 admin-only 访问的管理工具
14+
* (pgAdmin、未来的 Umami admin 面板等)共用同一个端点,不再一个工具一个
15+
* controller——凭据和角色都一样,复用即可。
1516
*
1617
* 设计要点:
1718
* - sa-token 默认从 header / cookie 两边读 token(sa-token.is-read-cookie=true 默认开)
1819
* 配合前端在登录时把 satoken 同步写一份到 .involutionhell.com 域名 cookie,
1920
* 浏览器直接访问 api 子域时也能带上,forward_auth 校验链才能成立
2021
* - 响应体故意空壳,Caddy 只看状态码不看 body;保持最小负载
21-
* - 单独放在 admin/controller 包下而不是塞进 events/controller:这是
22-
* "基础设施级"鉴权桩,不属于任何业务域,放一起语义会误导
22+
* - superadmin 的 roles 集合也包含 "admin"(由 sa-token 角色体系保证),
23+
* 所以超管也能直接过,不用单独处理
24+
* - Infisical **不**走这个端点——它自己有完整的 GitHub OAuth + 内部 RBAC + 审计,
25+
* 面向所有协作者(非 admin 也能登录,权限在 Infisical 内部按 project 细分)。
26+
* Caddy 对 secrets.involutionhell.com 是直通反代,没有 forward_auth。
2327
*/
2428
@RestController
2529
@RequestMapping("/api/admin")
2630
public class AdminInfraController {
2731

2832
/**
29-
* Caddy 的 forward_auth 目标。只要通过 @SaCheckRole("admin") 就返回 200。
33+
* Caddy forward_auth 目标。通过 @SaCheckRole("admin") 就 200,否则 sa-token 抛
34+
* NotLogin / NotPermission 异常,全局异常处理器转成 401 / 403,Caddy 据此拒绝代理。
3035
*
31-
* superadmin 的 roles 集合也包含 "admin"(由 sa-token 角色体系保证),
32-
* 所以超管也能直接过,不用单独处理。
36+
* 泛化自原来的 /pgadmin-check:现在 pgAdmin + Umami(以及未来的 admin-only 管理面板)
37+
* 都指向这一个端点。
38+
*/
39+
@GetMapping("/devtool-check")
40+
@SaCheckRole("admin")
41+
public ApiResponse<Void> devtoolCheck() {
42+
return ApiResponse.okMessage("authorized");
43+
}
44+
45+
/**
46+
* 向后兼容:保留原 /pgadmin-check 路径,Caddyfile 里暂时还指着它,迁移完成后删除。
47+
* 两个方法都走同一 @SaCheckRole 语义,不会分叉行为。
3348
*/
3449
@GetMapping("/pgadmin-check")
3550
@SaCheckRole("admin")

0 commit comments

Comments
 (0)