This is an automated email from the ASF dual-hosted git repository.

vincbeck 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 e187961bde0 Add single endpoint to retrieve menu information (#48762)
e187961bde0 is described below

commit e187961bde09198942e09494c551c5e9ee76d275
Author: Vincent <[email protected]>
AuthorDate: Mon Apr 7 11:03:46 2025 -0400

    Add single endpoint to retrieve menu information (#48762)
---
 .../src/airflow/api_fastapi/common/types.py        |  2 +-
 .../api_fastapi/core_api/datamodels/ui/auth.py     | 12 ++---
 .../api_fastapi/core_api/openapi/v1-generated.yaml | 60 ++++++++++++++--------
 .../airflow/api_fastapi/core_api/routes/ui/auth.py | 17 +++---
 .../src/airflow/ui/openapi-gen/queries/common.ts   | 14 ++---
 .../ui/openapi-gen/queries/ensureQueryData.ts      |  8 +--
 .../src/airflow/ui/openapi-gen/queries/prefetch.ts |  8 +--
 .../src/airflow/ui/openapi-gen/queries/queries.ts  | 10 ++--
 .../src/airflow/ui/openapi-gen/queries/suspense.ts | 10 ++--
 .../airflow/ui/openapi-gen/requests/schemas.gen.ts | 58 ++++++++++++++-------
 .../ui/openapi-gen/requests/services.gen.ts        |  8 +--
 .../airflow/ui/openapi-gen/requests/types.gen.ts   | 30 +++++++----
 .../airflow/ui/src/layouts/Nav/SecurityButton.tsx  |  8 +--
 airflow-core/src/airflow/ui/src/pages/Security.tsx |  6 +--
 .../api_fastapi/core_api/routes/ui/test_auth.py    | 22 +++++---
 .../providers/fab/auth_manager/fab_auth_manager.py |  2 +-
 .../unit/fab/auth_manager/test_fab_auth_manager.py |  7 +--
 17 files changed, 166 insertions(+), 116 deletions(-)

diff --git a/airflow-core/src/airflow/api_fastapi/common/types.py 
b/airflow-core/src/airflow/api_fastapi/common/types.py
index fa1a1d904ff..758c80cb676 100644
--- a/airflow-core/src/airflow/api_fastapi/common/types.py
+++ b/airflow-core/src/airflow/api_fastapi/common/types.py
@@ -87,7 +87,7 @@ class MenuItem(Enum):
     """Define all menu items defined in the menu."""
 
     ASSETS = "Assets"
-    ASSET_EVENTS = "Asset Events"
+    AUDIT_LOG = "Audit log"
     CONNECTIONS = "Connections"
     DAGS = "Dags"
     DOCS = "Docs"
diff --git 
a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/ui/auth.py 
b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/ui/auth.py
index ab445be12f8..736f4ffdc06 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/datamodels/ui/auth.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/datamodels/ui/auth.py
@@ -17,18 +17,12 @@
 
 from __future__ import annotations
 
+from airflow.api_fastapi.common.types import ExtraMenuItem, MenuItem
 from airflow.api_fastapi.core_api.base import BaseModel
 
 
-class MenuItem(BaseModel):
-    """Menu Item for responses."""
-
-    text: str
-    href: str
-
-
 class MenuItemCollectionResponse(BaseModel):
     """Menu Item Collection serializer for responses."""
 
-    menu_items: list[MenuItem]
-    total_entries: int
+    authorized_menu_items: list[MenuItem]
+    extra_menu_items: list[ExtraMenuItem]
diff --git 
a/airflow-core/src/airflow/api_fastapi/core_api/openapi/v1-generated.yaml 
b/airflow-core/src/airflow/api_fastapi/core_api/openapi/v1-generated.yaml
index 3170fe54bae..28129ef988b 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/openapi/v1-generated.yaml
+++ b/airflow-core/src/airflow/api_fastapi/core_api/openapi/v1-generated.yaml
@@ -7,12 +7,12 @@ info:
     Users should not rely on those but use the public ones instead.
   version: 0.1.0
 paths:
-  /ui/auth/links:
+  /ui/auth/menus:
     get:
       tags:
       - Auth Links
-      summary: Get Auth Links
-      operationId: get_auth_links
+      summary: Get Auth Menus
+      operationId: get_auth_menus
       responses:
         '200':
           description: Successful Response
@@ -9807,6 +9807,19 @@ components:
       type: object
       title: ExtraLinksResponse
       description: Extra Links Response.
+    ExtraMenuItem:
+      properties:
+        text:
+          type: string
+          title: Text
+        href:
+          type: string
+          title: Href
+      type: object
+      required:
+      - text
+      - href
+      title: ExtraMenuItem
     FastAPIAppResponse:
       properties:
         app:
@@ -10174,33 +10187,36 @@ components:
       title: JobResponse
       description: Job serializer for responses.
     MenuItem:
-      properties:
-        text:
-          type: string
-          title: Text
-        href:
-          type: string
-          title: Href
-      type: object
-      required:
-      - text
-      - href
+      type: string
+      enum:
+      - Assets
+      - Audit log
+      - Connections
+      - Dags
+      - Docs
+      - Plugins
+      - Pools
+      - Providers
+      - Variables
+      - XComs
       title: MenuItem
-      description: Menu Item for responses.
+      description: Define all menu items defined in the menu.
     MenuItemCollectionResponse:
       properties:
-        menu_items:
+        authorized_menu_items:
           items:
             $ref: '#/components/schemas/MenuItem'
           type: array
-          title: Menu Items
-        total_entries:
-          type: integer
-          title: Total Entries
+          title: Authorized Menu Items
+        extra_menu_items:
+          items:
+            $ref: '#/components/schemas/ExtraMenuItem'
+          type: array
+          title: Extra Menu Items
       type: object
       required:
-      - menu_items
-      - total_entries
+      - authorized_menu_items
+      - extra_menu_items
       title: MenuItemCollectionResponse
       description: Menu Item Collection serializer for responses.
     NodeResponse:
diff --git a/airflow-core/src/airflow/api_fastapi/core_api/routes/ui/auth.py 
b/airflow-core/src/airflow/api_fastapi/core_api/routes/ui/auth.py
index b93d9455d6a..f3c20a9ccef 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/routes/ui/auth.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/routes/ui/auth.py
@@ -17,23 +17,24 @@
 
 from __future__ import annotations
 
-from typing import cast
-
 from airflow.api_fastapi.app import get_auth_manager
 from airflow.api_fastapi.common.router import AirflowRouter
-from airflow.api_fastapi.core_api.datamodels.ui.auth import MenuItem, 
MenuItemCollectionResponse
+from airflow.api_fastapi.core_api.datamodels.ui.auth import (
+    MenuItemCollectionResponse,
+)
 from airflow.api_fastapi.core_api.security import GetUserDep
 
 auth_router = AirflowRouter(tags=["Auth Links"])
 
 
-@auth_router.get("/auth/links")
-def get_auth_links(
+@auth_router.get("/auth/menus")
+def get_auth_menus(
     user: GetUserDep,
 ) -> MenuItemCollectionResponse:
-    menu_items = get_auth_manager().get_extra_menu_items(user=user)
+    authorized_menu_items = 
get_auth_manager().get_authorized_menu_items(user=user)
+    extra_menu_items = get_auth_manager().get_extra_menu_items(user=user)
 
     return MenuItemCollectionResponse(
-        menu_items=cast("list[MenuItem]", menu_items),
-        total_entries=len(menu_items),
+        authorized_menu_items=authorized_menu_items,
+        extra_menu_items=extra_menu_items,
     )
diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts 
b/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts
index b3308f30f9e..b452383ad48 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts
@@ -38,16 +38,16 @@ import {
 } from "../requests/services.gen";
 import { DagRunState, DagWarningType } from "../requests/types.gen";
 
-export type AuthLinksServiceGetAuthLinksDefaultResponse = Awaited<
-  ReturnType<typeof AuthLinksService.getAuthLinks>
+export type AuthLinksServiceGetAuthMenusDefaultResponse = Awaited<
+  ReturnType<typeof AuthLinksService.getAuthMenus>
 >;
-export type AuthLinksServiceGetAuthLinksQueryResult<
-  TData = AuthLinksServiceGetAuthLinksDefaultResponse,
+export type AuthLinksServiceGetAuthMenusQueryResult<
+  TData = AuthLinksServiceGetAuthMenusDefaultResponse,
   TError = unknown,
 > = UseQueryResult<TData, TError>;
-export const useAuthLinksServiceGetAuthLinksKey = 
"AuthLinksServiceGetAuthLinks";
-export const UseAuthLinksServiceGetAuthLinksKeyFn = (queryKey?: 
Array<unknown>) => [
-  useAuthLinksServiceGetAuthLinksKey,
+export const useAuthLinksServiceGetAuthMenusKey = 
"AuthLinksServiceGetAuthMenus";
+export const UseAuthLinksServiceGetAuthMenusKeyFn = (queryKey?: 
Array<unknown>) => [
+  useAuthLinksServiceGetAuthMenusKey,
   ...(queryKey ?? []),
 ];
 export type AssetServiceNextRunAssetsDefaultResponse = 
Awaited<ReturnType<typeof AssetService.nextRunAssets>>;
diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts 
b/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts
index db69e50d1c8..dbe2677a407 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts
@@ -39,14 +39,14 @@ import { DagRunState, DagWarningType } from 
"../requests/types.gen";
 import * as Common from "./common";
 
 /**
- * Get Auth Links
+ * Get Auth Menus
  * @returns MenuItemCollectionResponse Successful Response
  * @throws ApiError
  */
-export const ensureUseAuthLinksServiceGetAuthLinksData = (queryClient: 
QueryClient) =>
+export const ensureUseAuthLinksServiceGetAuthMenusData = (queryClient: 
QueryClient) =>
   queryClient.ensureQueryData({
-    queryKey: Common.UseAuthLinksServiceGetAuthLinksKeyFn(),
-    queryFn: () => AuthLinksService.getAuthLinks(),
+    queryKey: Common.UseAuthLinksServiceGetAuthMenusKeyFn(),
+    queryFn: () => AuthLinksService.getAuthMenus(),
   });
 /**
  * Next Run Assets
diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts 
b/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts
index 99d44a857e1..46637153461 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts
@@ -39,14 +39,14 @@ import { DagRunState, DagWarningType } from 
"../requests/types.gen";
 import * as Common from "./common";
 
 /**
- * Get Auth Links
+ * Get Auth Menus
  * @returns MenuItemCollectionResponse Successful Response
  * @throws ApiError
  */
-export const prefetchUseAuthLinksServiceGetAuthLinks = (queryClient: 
QueryClient) =>
+export const prefetchUseAuthLinksServiceGetAuthMenus = (queryClient: 
QueryClient) =>
   queryClient.prefetchQuery({
-    queryKey: Common.UseAuthLinksServiceGetAuthLinksKeyFn(),
-    queryFn: () => AuthLinksService.getAuthLinks(),
+    queryKey: Common.UseAuthLinksServiceGetAuthMenusKeyFn(),
+    queryFn: () => AuthLinksService.getAuthMenus(),
   });
 /**
  * Next Run Assets
diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts 
b/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts
index 9429a0b14bc..093d417dbee 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts
@@ -62,12 +62,12 @@ import {
 import * as Common from "./common";
 
 /**
- * Get Auth Links
+ * Get Auth Menus
  * @returns MenuItemCollectionResponse Successful Response
  * @throws ApiError
  */
-export const useAuthLinksServiceGetAuthLinks = <
-  TData = Common.AuthLinksServiceGetAuthLinksDefaultResponse,
+export const useAuthLinksServiceGetAuthMenus = <
+  TData = Common.AuthLinksServiceGetAuthMenusDefaultResponse,
   TError = unknown,
   TQueryKey extends Array<unknown> = unknown[],
 >(
@@ -75,8 +75,8 @@ export const useAuthLinksServiceGetAuthLinks = <
   options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">,
 ) =>
   useQuery<TData, TError>({
-    queryKey: Common.UseAuthLinksServiceGetAuthLinksKeyFn(queryKey),
-    queryFn: () => AuthLinksService.getAuthLinks() as TData,
+    queryKey: Common.UseAuthLinksServiceGetAuthMenusKeyFn(queryKey),
+    queryFn: () => AuthLinksService.getAuthMenus() as TData,
     ...options,
   });
 /**
diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts 
b/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts
index 732c28f8e37..f6edb569312 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts
@@ -39,12 +39,12 @@ import { DagRunState, DagWarningType } from 
"../requests/types.gen";
 import * as Common from "./common";
 
 /**
- * Get Auth Links
+ * Get Auth Menus
  * @returns MenuItemCollectionResponse Successful Response
  * @throws ApiError
  */
-export const useAuthLinksServiceGetAuthLinksSuspense = <
-  TData = Common.AuthLinksServiceGetAuthLinksDefaultResponse,
+export const useAuthLinksServiceGetAuthMenusSuspense = <
+  TData = Common.AuthLinksServiceGetAuthMenusDefaultResponse,
   TError = unknown,
   TQueryKey extends Array<unknown> = unknown[],
 >(
@@ -52,8 +52,8 @@ export const useAuthLinksServiceGetAuthLinksSuspense = <
   options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">,
 ) =>
   useSuspenseQuery<TData, TError>({
-    queryKey: Common.UseAuthLinksServiceGetAuthLinksKeyFn(queryKey),
-    queryFn: () => AuthLinksService.getAuthLinks() as TData,
+    queryKey: Common.UseAuthLinksServiceGetAuthMenusKeyFn(queryKey),
+    queryFn: () => AuthLinksService.getAuthMenus() as TData,
     ...options,
   });
 /**
diff --git a/airflow-core/src/airflow/ui/openapi-gen/requests/schemas.gen.ts 
b/airflow-core/src/airflow/ui/openapi-gen/requests/schemas.gen.ts
index 17bd82c362d..1f3aa3841ab 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/requests/schemas.gen.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/requests/schemas.gen.ts
@@ -3693,6 +3693,22 @@ export const $ExtraLinksResponse = {
   description: "Extra Links Response.",
 } as const;
 
+export const $ExtraMenuItem = {
+  properties: {
+    text: {
+      type: "string",
+      title: "Text",
+    },
+    href: {
+      type: "string",
+      title: "Href",
+    },
+  },
+  type: "object",
+  required: ["text", "href"],
+  title: "ExtraMenuItem",
+} as const;
+
 export const $FastAPIAppResponse = {
   properties: {
     app: {
@@ -4266,38 +4282,42 @@ export const $JobResponse = {
 } as const;
 
 export const $MenuItem = {
-  properties: {
-    text: {
-      type: "string",
-      title: "Text",
-    },
-    href: {
-      type: "string",
-      title: "Href",
-    },
-  },
-  type: "object",
-  required: ["text", "href"],
+  type: "string",
+  enum: [
+    "Assets",
+    "Audit log",
+    "Connections",
+    "Dags",
+    "Docs",
+    "Plugins",
+    "Pools",
+    "Providers",
+    "Variables",
+    "XComs",
+  ],
   title: "MenuItem",
-  description: "Menu Item for responses.",
+  description: "Define all menu items defined in the menu.",
 } as const;
 
 export const $MenuItemCollectionResponse = {
   properties: {
-    menu_items: {
+    authorized_menu_items: {
       items: {
         $ref: "#/components/schemas/MenuItem",
       },
       type: "array",
-      title: "Menu Items",
+      title: "Authorized Menu Items",
     },
-    total_entries: {
-      type: "integer",
-      title: "Total Entries",
+    extra_menu_items: {
+      items: {
+        $ref: "#/components/schemas/ExtraMenuItem",
+      },
+      type: "array",
+      title: "Extra Menu Items",
     },
   },
   type: "object",
-  required: ["menu_items", "total_entries"],
+  required: ["authorized_menu_items", "extra_menu_items"],
   title: "MenuItemCollectionResponse",
   description: "Menu Item Collection serializer for responses.",
 } as const;
diff --git a/airflow-core/src/airflow/ui/openapi-gen/requests/services.gen.ts 
b/airflow-core/src/airflow/ui/openapi-gen/requests/services.gen.ts
index 208adb5e49e..a87ea6472f4 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/requests/services.gen.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/requests/services.gen.ts
@@ -3,7 +3,7 @@ import type { CancelablePromise } from 
"./core/CancelablePromise";
 import { OpenAPI } from "./core/OpenAPI";
 import { request as __request } from "./core/request";
 import type {
-  GetAuthLinksResponse,
+  GetAuthMenusResponse,
   NextRunAssetsData,
   NextRunAssetsResponse,
   GetAssetsData,
@@ -221,14 +221,14 @@ import type {
 
 export class AuthLinksService {
   /**
-   * Get Auth Links
+   * Get Auth Menus
    * @returns MenuItemCollectionResponse Successful Response
    * @throws ApiError
    */
-  public static getAuthLinks(): CancelablePromise<GetAuthLinksResponse> {
+  public static getAuthMenus(): CancelablePromise<GetAuthMenusResponse> {
     return __request(OpenAPI, {
       method: "GET",
-      url: "/ui/auth/links",
+      url: "/ui/auth/menus",
     });
   }
 }
diff --git a/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts 
b/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts
index 9358f5dd75d..d534ebff362 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts
@@ -971,6 +971,11 @@ export type ExtraLinksResponse = {
   [key: string]: string | null;
 };
 
+export type ExtraMenuItem = {
+  text: string;
+  href: string;
+};
+
 /**
  * Serializer for Plugin FastAPI App responses.
  */
@@ -1111,19 +1116,26 @@ export type JobResponse = {
 };
 
 /**
- * Menu Item for responses.
+ * Define all menu items defined in the menu.
  */
-export type MenuItem = {
-  text: string;
-  href: string;
-};
+export type MenuItem =
+  | "Assets"
+  | "Audit log"
+  | "Connections"
+  | "Dags"
+  | "Docs"
+  | "Plugins"
+  | "Pools"
+  | "Providers"
+  | "Variables"
+  | "XComs";
 
 /**
  * Menu Item Collection serializer for responses.
  */
 export type MenuItemCollectionResponse = {
-  menu_items: Array<MenuItem>;
-  total_entries: number;
+  authorized_menu_items: Array<MenuItem>;
+  extra_menu_items: Array<ExtraMenuItem>;
 };
 
 /**
@@ -1693,7 +1705,7 @@ export type XComUpdateBody = {
   map_index?: number;
 };
 
-export type GetAuthLinksResponse = MenuItemCollectionResponse;
+export type GetAuthMenusResponse = MenuItemCollectionResponse;
 
 export type NextRunAssetsData = {
   dagId: string;
@@ -2631,7 +2643,7 @@ export type NotFoundHandlerData = {
 export type NotFoundHandlerResponse = unknown;
 
 export type $OpenApiTs = {
-  "/ui/auth/links": {
+  "/ui/auth/menus": {
     get: {
       res: {
         /**
diff --git a/airflow-core/src/airflow/ui/src/layouts/Nav/SecurityButton.tsx 
b/airflow-core/src/airflow/ui/src/layouts/Nav/SecurityButton.tsx
index cdef60a1c31..eead679a88d 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Nav/SecurityButton.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Nav/SecurityButton.tsx
@@ -19,15 +19,15 @@
 import { FiLock } from "react-icons/fi";
 import { Link } from "react-router-dom";
 
-import { useAuthLinksServiceGetAuthLinks } from "openapi/queries";
+import { useAuthLinksServiceGetAuthMenus } from "openapi/queries";
 import { Menu } from "src/components/ui";
 
 import { NavButton } from "./NavButton";
 
 export const SecurityButton = () => {
-  const { data: authLinks } = useAuthLinksServiceGetAuthLinks();
+  const { data: authLinks } = useAuthLinksServiceGetAuthMenus();
 
-  if (authLinks?.total_entries === undefined || authLinks.total_entries < 1) {
+  if (authLinks?.extra_menu_items === undefined || 
authLinks.extra_menu_items.length < 1) {
     return undefined;
   }
 
@@ -37,7 +37,7 @@ export const SecurityButton = () => {
         <NavButton icon={<FiLock size="1.75rem" />} title="Security" />
       </Menu.Trigger>
       <Menu.Content>
-        {authLinks.menu_items.map(({ text }) => (
+        {authLinks.extra_menu_items.map(({ text }) => (
           <Menu.Item asChild key={text} value={text}>
             <Link aria-label={text} 
to={`security/${text.toLowerCase().replace(" ", "-")}`}>
               {text}
diff --git a/airflow-core/src/airflow/ui/src/pages/Security.tsx 
b/airflow-core/src/airflow/ui/src/pages/Security.tsx
index 592e45c74a1..3a6061478eb 100644
--- a/airflow-core/src/airflow/ui/src/pages/Security.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Security.tsx
@@ -19,7 +19,7 @@
 import { Box } from "@chakra-ui/react";
 import { useParams } from "react-router-dom";
 
-import { useAuthLinksServiceGetAuthLinks } from "openapi/queries";
+import { useAuthLinksServiceGetAuthMenus } from "openapi/queries";
 import { ProgressBar } from "src/components/ui";
 
 import { ErrorPage } from "./Error";
@@ -27,9 +27,9 @@ import { ErrorPage } from "./Error";
 export const Security = () => {
   const { page } = useParams();
 
-  const { data: authLinks, isLoading } = useAuthLinksServiceGetAuthLinks();
+  const { data: authLinks, isLoading } = useAuthLinksServiceGetAuthMenus();
 
-  const link = authLinks?.menu_items.find((mi) => 
mi.text.toLowerCase().replace(" ", "-") === page);
+  const link = authLinks?.extra_menu_items.find((mi) => 
mi.text.toLowerCase().replace(" ", "-") === page);
 
   if (!link) {
     if (isLoading) {
diff --git 
a/airflow-core/tests/unit/api_fastapi/core_api/routes/ui/test_auth.py 
b/airflow-core/tests/unit/api_fastapi/core_api/routes/ui/test_auth.py
index ea6d61ca05a..1b37bc4ba86 100644
--- a/airflow-core/tests/unit/api_fastapi/core_api/routes/ui/test_auth.py
+++ b/airflow-core/tests/unit/api_fastapi/core_api/routes/ui/test_auth.py
@@ -20,7 +20,8 @@ from unittest import mock
 
 import pytest
 
-from airflow.api_fastapi.common.types import ExtraMenuItem
+from airflow.api_fastapi.auth.managers.simple.simple_auth_manager import 
SimpleAuthManager
+from airflow.api_fastapi.common.types import ExtraMenuItem, MenuItem
 
 pytestmark = pytest.mark.db_test
 
@@ -28,27 +29,32 @@ pytestmark = pytest.mark.db_test
 class TestGetAuthLinks:
     @mock.patch("airflow.api_fastapi.core_api.routes.ui.auth.get_auth_manager")
     def test_should_response_200(self, mock_get_auth_manager, test_client):
+        
mock_get_auth_manager.return_value.get_authorized_menu_items.return_value = [
+            MenuItem.VARIABLES,
+            MenuItem.CONNECTIONS,
+        ]
         mock_get_auth_manager.return_value.get_extra_menu_items.return_value = 
[
             ExtraMenuItem(text="name1", href="path1"),
             ExtraMenuItem(text="name2", href="path2"),
         ]
-        response = test_client.get("/auth/links")
+        response = test_client.get("/auth/menus")
 
         assert response.status_code == 200
         assert response.json() == {
-            "menu_items": [
+            "authorized_menu_items": ["Variables", "Connections"],
+            "extra_menu_items": [
                 {"text": "name1", "href": "path1"},
                 {"text": "name2", "href": "path2"},
             ],
-            "total_entries": 2,
         }
 
     def test_with_unauthenticated_user(self, unauthenticated_test_client):
-        response = unauthenticated_test_client.get("/auth/links")
+        response = unauthenticated_test_client.get("/auth/menus")
         assert response.status_code == 401
         assert response.json() == {"detail": "Not authenticated"}
 
-    def test_with_unauthorized_user(self, unauthorized_test_client):
-        response = unauthorized_test_client.get("/auth/links")
+    @mock.patch.object(SimpleAuthManager, "filter_authorized_menu_items", 
return_value=[])
+    def test_with_unauthorized_user(self, _, unauthorized_test_client):
+        response = unauthorized_test_client.get("/auth/menus")
         assert response.status_code == 200
-        assert response.json() == {"menu_items": [], "total_entries": 0}
+        assert response.json() == {"authorized_menu_items": [], 
"extra_menu_items": []}
diff --git 
a/providers/fab/src/airflow/providers/fab/auth_manager/fab_auth_manager.py 
b/providers/fab/src/airflow/providers/fab/auth_manager/fab_auth_manager.py
index 4d3c1dc3c9e..f801eb9cdbd 100644
--- a/providers/fab/src/airflow/providers/fab/auth_manager/fab_auth_manager.py
+++ b/providers/fab/src/airflow/providers/fab/auth_manager/fab_auth_manager.py
@@ -155,7 +155,7 @@ _MAP_ACCESS_VIEW_TO_FAB_RESOURCE_TYPE = {
 
 _MAP_MENU_ITEM_TO_FAB_RESOURCE_TYPE = {
     MenuItem.ASSETS: RESOURCE_ASSET,
-    MenuItem.ASSET_EVENTS: RESOURCE_ASSET,
+    MenuItem.AUDIT_LOG: RESOURCE_AUDIT_LOG,
     MenuItem.CONNECTIONS: RESOURCE_CONNECTION,
     MenuItem.DAGS: RESOURCE_DAG,
     MenuItem.DOCS: RESOURCE_DOCS,
diff --git a/providers/fab/tests/unit/fab/auth_manager/test_fab_auth_manager.py 
b/providers/fab/tests/unit/fab/auth_manager/test_fab_auth_manager.py
index d6db61c4492..9f2057e339c 100644
--- a/providers/fab/tests/unit/fab/auth_manager/test_fab_auth_manager.py
+++ b/providers/fab/tests/unit/fab/auth_manager/test_fab_auth_manager.py
@@ -60,6 +60,7 @@ from airflow.providers.fab.www.security.permissions import (
     ACTION_CAN_DELETE,
     ACTION_CAN_EDIT,
     ACTION_CAN_READ,
+    RESOURCE_AUDIT_LOG,
     RESOURCE_CONFIG,
     RESOURCE_CONNECTION,
     RESOURCE_DAG,
@@ -488,9 +489,9 @@ class TestFabAuthManager:
                 [],
             ),
             (
-                [MenuItem.ASSET_EVENTS, MenuItem.VARIABLES],
-                [(ACTION_CAN_ACCESS_MENU, RESOURCE_ASSET), (ACTION_CAN_READ, 
RESOURCE_VARIABLE)],
-                [MenuItem.ASSET_EVENTS],
+                [MenuItem.AUDIT_LOG, MenuItem.VARIABLES],
+                [(ACTION_CAN_ACCESS_MENU, RESOURCE_AUDIT_LOG), 
(ACTION_CAN_READ, RESOURCE_VARIABLE)],
+                [MenuItem.AUDIT_LOG],
             ),
             (
                 [],

Reply via email to