rawwar commented on issue #57561:
URL: https://github.com/apache/airflow/issues/57561#issuecomment-3476550715
> User.perms property executes database query each time accessed.
filter_authorized_menu_items() calls _is_authorized() for each menu item. Each
menu item check accesses user.perms → triggers query. So N+1 query issue is
there.
I checked with FAB auth manager and here are the queries that ran, when I
invoked the endpoint:
```
INFO: 192.168.147.1:57620 - "GET /ui/auth/menus HTTP/1.1" 200 OK
2025-11-01T16:41:55.242021Z [info ] BEGIN (implicit)
[sqlalchemy.engine.Engine] loc=base.py:1032
2025-11-01T16:41:55.242471Z [info ] SELECT ab_user.id,
ab_user.first_name, ab_user.last_name, ab_user.username, ab_user.password,
ab_user.active, ab_user.email, ab_user.last_login, ab_user.login_count,
ab_user.fail_login_count, ab_user.created_on, ab_user.changed_on,
ab_user.created_by_fk, ab_user.changed_by_fk
FROM ab_user
WHERE ab_user.id = %(id_1)s [sqlalchemy.engine.Engine] loc=base.py:1863
2025-11-01T16:41:55.242607Z [info ] [cached since 118.6s ago] {'id_1':
1} [sqlalchemy.engine.Engine] loc=base.py:1868
2025-11-01T16:41:55.244007Z [info ] SELECT ab_user_1.id AS ab_user_1_id,
ab_role.id AS ab_role_id, ab_role.name AS ab_role_name,
ab_permission_view_1.permission_id AS ab_permission_view_1_permission_id,
ab_permission_1.id AS ab_permission_1_id, ab_permission_1.name AS
ab_permission_1_name, ab_permission_view_1.view_menu_id AS
ab_permission_view_1_view_menu_id, ab_view_menu_1.id AS ab_view_menu_1_id,
ab_view_menu_1.name AS ab_view_menu_1_name, ab_permission_view_1.id AS
ab_permission_view_1_id
FROM ab_user AS ab_user_1 JOIN ab_user_role AS ab_user_role_1 ON
ab_user_1.id = ab_user_role_1.user_id JOIN ab_role ON ab_role.id =
ab_user_role_1.role_id LEFT OUTER JOIN (ab_permission_view_role AS
ab_permission_view_role_1 JOIN ab_permission_view AS ab_permission_view_1 ON
ab_permission_view_1.id = ab_permission_view_role_1.permission_view_id) ON
ab_role.id = ab_permission_view_role_1.role_id LEFT OUTER JOIN ab_permission AS
ab_permission_1 ON ab_permission_1.id = ab_permission_view_1.permission_id LEFT
OUTER JOIN ab_view_menu AS ab_view_menu_1 ON ab_view_menu_1.id =
ab_permission_view_1.view_menu_id
WHERE ab_user_1.id IN (%(primary_keys_1)s) [sqlalchemy.engine.Engine]
loc=base.py:1863
2025-11-01T16:41:55.244098Z [info ] [cached since 119.1s ago]
{'primary_keys_1': 1} [sqlalchemy.engine.Engine] loc=base.py:1868
2025-11-01T16:41:55.246658Z [info ] COMMIT
[sqlalchemy.engine.Engine] loc=base.py:1092
INFO: 192.168.147.1:38802 - "GET /ui/auth/menus HTTP/1.1" 200 OK
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]