feat: 新增用户管理(用户增删改查、密码重置、角色权限、会话认证)与 API 指南
- 新增 app/api/deps.py、app/core/users.py、app/core/sessions.py:会话鉴权依赖、 用户存储(PBKDF2-HMAC-SHA256 + 随机 salt,Redis/内存降级)、会话签发与校验(TTL 12h) - auth.py 新增用户管理端点(列表/创建/重置密码/删除)与 admin/user 角色权限边界, user 访问用户管理返回 1006,禁删自己与最后一个 admin - admin.html 新增用户管理面板(仅 admin 挂载)与 API 指南在线测试台 - Dockerfile 将 uv 放入 PATH;docker-compose 调整 qdrant 依赖为 service_started 并移除依赖 curl 的 healthcheck(官方镜像不含 curl) - 新增用户管理测试(users/sessions/auth_api/auth_integration),全量 461 项测试通过 Co-Authored-By: WorkBuddy <workbuddy@tencent.com>
This commit is contained in:
@@ -166,7 +166,9 @@ async def _seed_documents(service: QdrantService) -> None:
|
||||
class TestAdminClosedLoop:
|
||||
"""文档管理 API + stats 的完整闭环(真实内存 Qdrant + TestClient)"""
|
||||
|
||||
async def test_document_admin_closed_loop(self, monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
async def test_document_admin_closed_loop(
|
||||
self, monkeypatch: pytest.MonkeyPatch, admin_headers: dict[str, str]
|
||||
) -> None:
|
||||
service = QdrantService(client=AsyncQdrantClient(location=":memory:"))
|
||||
await service.ensure_collections()
|
||||
await _seed_documents(service)
|
||||
@@ -235,7 +237,7 @@ class TestAdminClosedLoop:
|
||||
}
|
||||
|
||||
# 4. 删除文档 A:deleted_total > 0,各集合删除数与写入一致
|
||||
resp = client.delete(f"/api/v1/documents/{DOC_A}")
|
||||
resp = client.delete(f"/api/v1/documents/{DOC_A}", headers=admin_headers)
|
||||
assert resp.status_code == 200
|
||||
body = resp.json()
|
||||
assert body["code"] == 0
|
||||
@@ -282,7 +284,7 @@ class TestAdminClosedLoop:
|
||||
assert [item["doc_id"] for item in items] == [DOC_B]
|
||||
|
||||
# 6. 幂等再删:code=0 且 deleted_total=0,各集合删除数全 0
|
||||
resp = client.delete(f"/api/v1/documents/{DOC_A}")
|
||||
resp = client.delete(f"/api/v1/documents/{DOC_A}", headers=admin_headers)
|
||||
body = resp.json()
|
||||
assert body["code"] == 0
|
||||
data = body["data"]
|
||||
|
||||
Reference in New Issue
Block a user