From 1893694a4631aca8e51603a2e381495a2324daed Mon Sep 17 00:00:00 2001 From: unknown <798648091@qq.com> Date: Sat, 25 Jul 2026 15:59:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=A3=8E=E6=8E=A7=E5=B0=81=E7=A6=81=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/repositories/risk_monitor.py | 22 +++++++++++++--------- app/admin/schemas/risk_monitor.py | 1 + tests/test_risk_monitor.py | 16 ++++++++++++++++ 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/app/admin/repositories/risk_monitor.py b/app/admin/repositories/risk_monitor.py index 8ae482d..dbb986f 100644 --- a/app/admin/repositories/risk_monitor.py +++ b/app/admin/repositories/risk_monitor.py @@ -255,17 +255,25 @@ def list_incidents( "status": incident.status, } if incident.subject_type == "device": - item["device_model"] = _latest_device_model(db, incident.subject_id) - item["first_used_at"] = _first_used_at(db, incident.subject_id) - item["restricted"] = risk_repo.is_restricted( + restriction = risk_repo.get_active_restriction( db, subject_type="device", subject_id=incident.subject_id, scope=risk_repo.SCOPE_AUTH_DEVICE, ) + item["device_model"] = _latest_device_model(db, incident.subject_id) + item["first_used_at"] = _first_used_at(db, incident.subject_id) + item["restricted"] = restriction is not None + item["restriction_id"] = restriction.id if restriction else None else: uid = int(incident.subject_id) user = users.get(uid) + restriction = risk_repo.get_active_restriction( + db, + subject_type="user", + subject_id=incident.subject_id, + scope=risk_repo.SCOPE_ECONOMIC_ACCOUNT, + ) item.update( { "user_id": uid, @@ -274,12 +282,8 @@ def list_incidents( "common_device_id": _common_device( db, uid, incident.window_start, incident.window_end ), - "restricted": risk_repo.is_restricted( - db, - subject_type="user", - subject_id=incident.subject_id, - scope=risk_repo.SCOPE_ECONOMIC_ACCOUNT, - ), + "restricted": restriction is not None, + "restriction_id": restriction.id if restriction else None, } ) items.append(item) diff --git a/app/admin/schemas/risk_monitor.py b/app/admin/schemas/risk_monitor.py index 5a921ee..826393e 100644 --- a/app/admin/schemas/risk_monitor.py +++ b/app/admin/schemas/risk_monitor.py @@ -45,6 +45,7 @@ class RiskIncidentItem(BaseModel): event_count: int status: str restricted: bool = False + restriction_id: int | None = None class RiskIncidentPage(BaseModel): diff --git a/tests/test_risk_monitor.py b/tests/test_risk_monitor.py index 18923b0..b358cd3 100644 --- a/tests/test_risk_monitor.py +++ b/tests/test_risk_monitor.py @@ -265,6 +265,22 @@ def test_risk_monitor_ignore_and_block_are_enforced(client: TestClient) -> None: device_restriction_id = blocked_device.json()["restriction_id"] user_restriction_id = blocked_user.json()["restriction_id"] + blocked_sms = admin_client.get( + "/admin/api/risk-monitor/incidents/sms?status=blocked", + headers=headers, + ) + assert blocked_sms.status_code == 200 + assert blocked_sms.json()["items"][0]["restriction_id"] == device_restriction_id + assert blocked_sms.json()["items"][0]["restricted"] is True + + blocked_compare = admin_client.get( + "/admin/api/risk-monitor/incidents/compare?status=blocked", + headers=headers, + ) + assert blocked_compare.status_code == 200 + assert blocked_compare.json()["items"][0]["restriction_id"] == user_restriction_id + assert blocked_compare.json()["items"][0]["restricted"] is True + denied_sms = client.post( "/api/v1/auth/sms/send", json={