fix(saas): P0 安全修复 + P1 功能补全 — 角色提升、Admin 引导、IP 记录、密码修改
P0 安全修复: - 修复 account update 自角色提升漏洞: 非 admin 用户更新自己时剥离 role 字段 - 添加 Admin 引导机制: accounts 表为空时自动从环境变量创建 super_admin P1 功能补全: - 所有 17 个 log_operation 调用点传入真实客户端 IP (ConnectInfo + X-Forwarded-For) - AuthContext 新增 client_ip 字段, middleware 层自动提取 - main.rs 使用 into_make_service_with_connect_info 启用 SocketAddr 注入 - 新增 PUT /api/v1/auth/password 密码修改端点 (验证旧密码 + argon2 哈希) - 桌面端 SaaS 设置页添加密码修改 UI (折叠式表单) - SaaSClient 添加 changePassword() 方法 - 集成测试修复: 注入模拟 ConnectInfo 适配 onshot 测试模式
This commit is contained in:
@@ -11,6 +11,8 @@ const MAX_BODY_SIZE: usize = 1024 * 1024; // 1MB
|
||||
|
||||
async fn build_test_app() -> axum::Router {
|
||||
use zclaw_saas::{config::SaaSConfig, db::init_memory_db, state::AppState};
|
||||
use axum::extract::ConnectInfo;
|
||||
use std::net::SocketAddr;
|
||||
|
||||
// 测试环境设置开发模式 (允许 http、默认 JWT secret)
|
||||
std::env::set_var("ZCLAW_SAAS_DEV", "true");
|
||||
@@ -37,6 +39,14 @@ async fn build_test_app() -> axum::Router {
|
||||
.merge(public_routes)
|
||||
.merge(protected_routes)
|
||||
.with_state(state)
|
||||
.layer(axum::middleware::from_fn(
|
||||
|mut req: axum::extract::Request, next: axum::middleware::Next| async move {
|
||||
req.extensions_mut().insert(ConnectInfo::<SocketAddr>(
|
||||
"127.0.0.1:0".parse().unwrap(),
|
||||
));
|
||||
next.run(req).await
|
||||
},
|
||||
))
|
||||
}
|
||||
|
||||
/// 注册并登录,返回 JWT token
|
||||
|
||||
Reference in New Issue
Block a user