Skip to content

Clarify that DAG.access_control is only read by the FAB auth manager - #71260

Open
1fanwang wants to merge 3 commits into
apache:mainfrom
1fanwang:docs-access-control-fab-only
Open

Clarify that DAG.access_control is only read by the FAB auth manager#71260
1fanwang wants to merge 3 commits into
apache:mainfrom
1fanwang:docs-access-control-fab-only

Conversation

@1fanwang

@1fanwang 1fanwang commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

DAG.access_control was documented as if it moved to filter_authorized_dag_ids. That row is wrong in two ways.

First, it names the wrong method. FAB is the only auth manager whose Dag permissions come from access_control, and it overrides get_authorized_dag_ids, not filter_authorized_dag_ids, which has a default implementation whose docstring treats overriding it as a performance choice.

Second, the row reads like an import swap. It is not. access_control was an input to FAB's permission tables, not a generic authorization mechanism. Since #48070, core has only synced it when the auth manager is FAB (collection.py). With any other auth manager, the argument is still accepted and still serialized, but nothing reads it. A deployment that moves off FAB and leaves access_control on its Dags silently stops enforcing those grants.

The auth manager guide already says FAB is the only reader and names the right method. The migration list is where the deprecation warning sends readers, so it should say the same thing.

The warning emitted when access_control is set also reused the deprecation message from the airflow.security.permissions module, even when callers never imported that module. It now names DAG.access_control and warns that non-FAB auth managers ignore it and grant no access.

related: #53716

The migration list mapped DAG.access_control to filter_authorized_dag_ids,
which is a batching helper over is_authorized_dag rather than the place a
dag-level decision is made, and which the FAB auth manager itself does not
override. It also read as a relocation, when access_control has no successor.

Core has only synced access_control when the auth manager is FAB since apache#48070,
so under any other auth manager the argument is parsed and serialized but never
consulted. A deployment migrating off FAB silently stops enforcing those grants.

Signed-off-by: 1fanwang <1fannnw@gmail.com>
…ement

The auth manager guide already states that access_control is FAB-only and
covers how a custom manager should express dag-level access. Re-deriving the
method stack here would put a third answer in a second doc, which is how the
two pages drifted apart in the first place.

Signed-off-by: 1fanwang <1fannnw@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant