This is an automated email from the ASF dual-hosted git repository.
pierrejeambrun pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 5cfb58c7de3 Fix backfill permissions (#62856)
5cfb58c7de3 is described below
commit 5cfb58c7de36550dd34370ca261dc936d528a938
Author: Pierre Jeambrun <[email protected]>
AuthorDate: Wed Mar 4 14:46:24 2026 +0100
Fix backfill permissions (#62856)
* Fix backfill permissions
* Fix CI
---
airflow-core/src/airflow/api_fastapi/core_api/security.py | 9 +++++++--
airflow-core/tests/unit/api_fastapi/core_api/test_security.py | 6 +++---
2 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/security.py
b/airflow-core/src/airflow/api_fastapi/core_api/security.py
index 188ee168693..0e59fb3550c 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/security.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/security.py
@@ -297,8 +297,13 @@ def requires_access_backfill(
dag_id = None
# Try to retrieve the dag_id from the backfill_id path param
- backfill_id = request.path_params.get("backfill_id")
- if backfill_id is not None and isinstance(backfill_id, int):
+ backfill_id_raw = request.path_params.get("backfill_id")
+ try:
+ backfill_id = int(backfill_id_raw) if backfill_id_raw is not None
else None
+ except ValueError:
+ backfill_id = None
+
+ if backfill_id is not None:
backfill = session.scalars(select(Backfill).where(Backfill.id ==
backfill_id)).one_or_none()
dag_id = backfill.dag_id if backfill else None
diff --git a/airflow-core/tests/unit/api_fastapi/core_api/test_security.py
b/airflow-core/tests/unit/api_fastapi/core_api/test_security.py
index 9b599a41c5c..e5cb5f17cf9 100644
--- a/airflow-core/tests/unit/api_fastapi/core_api/test_security.py
+++ b/airflow-core/tests/unit/api_fastapi/core_api/test_security.py
@@ -269,7 +269,7 @@ class TestFastApiSecurity:
session.scalars.return_value.one_or_none.return_value = backfill
request = Mock()
- request.path_params = {"backfill_id": 42}
+ request.path_params = {"backfill_id": "42"}
request.json = AsyncMock(return_value={})
user = Mock()
@@ -333,7 +333,7 @@ class TestFastApiSecurity:
session.scalars.return_value.one_or_none.return_value = backfill
request = Mock()
- request.path_params = {"backfill_id": 1}
+ request.path_params = {"backfill_id": "1"}
user = Mock()
inner = requires_access_backfill("GET")
@@ -364,7 +364,7 @@ class TestFastApiSecurity:
session.scalars.return_value.one_or_none.return_value = None
request = Mock()
- request.path_params = {"backfill_id": 999}
+ request.path_params = {"backfill_id": "999"}
request.json = AsyncMock(return_value={"dag_id": "fallback_dag_id"})
user = Mock()