---
title: "SQL-015: Retrieve a user's authorized menu items"
summary: Retrieve a user's authorized menu items
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-08-17
library: SAIF.Business.Menu
reference_type: package
---

# SQL-015: Retrieve a user's authorized menu items

This statement is the `RetrieveSQL` implementation of `clsMenuAuthorizedItemCollection.Criteria`, executed from `BeforeRetrieve` against `MENU_ITEM`, `MENU_SECURITY`, `MENU_SECURITY_USER`, `MENU_PAGE`, `BUSONLINE_APPS_CODE`, `MENU_CATEGORY_CODE`, `MENU_FAVORITE`. Retrieve a user's authorized menu items.

## Classification

| Field | Value |
| --- | --- |
| **SQL ID** | SQL-015 |
| **Operation type** | Read |
| **Execution method** | StringBuilder-assembled |
| **Database** | Oracle |
| **Schema** | `[unqualified]`** |
| **Command type** | Text |
| **Business object** | `clsMenuAuthorizedItemCollection` |
| **Criteria property** | `RetrieveSQL` |
| **Lifecycle method** | `BeforeRetrieve` |

## Parameters

| Parameter | Direction | Type | Max length | Description |
| --- | --- | --- | --- | --- |
| `:MenuUser` | Input | String | 30 | Menu user whose authorized set is resolved; one bind satisfies all three textual occurrences |

## Tables

| Table | Access | Columns used |
| --- | --- | --- |
| [MENU_ITEM](../database-tables.md#menu_item) | SELECT | MENU_ITEM_SEQ_NUM, PAGE_ORDER_NUM, MENU_CATEGORY_CODE, TOOL_TIP_TXT, VISIBLE_FLAG |
| [MENU_SECURITY](../database-tables.md#menu_security) | SELECT / JOIN | MENU_ITEM_SEQ_NUM, SECURITY_GROUP_TXT (join / NOT EXISTS) |
| [MENU_SECURITY_USER](../database-tables.md#menu_security_user) | SELECT / JOIN | MENU_USER, SECURITY_GROUP_TXT, MENU_USER_EMPLID |
| [MENU_PAGE](../database-tables.md#menu_page) | SELECT / JOIN | MENU_PAGE_SEQ_NUM, PAGE_NAME, PAGE_LINK_TXT, APPLICATION_CODE, toolbar flags/tips |
| [BUSONLINE_APPS_CODE](../database-tables.md#busonline_apps_code) | SELECT / JOIN | CODE, CODE_DESCR (application path) |
| [MENU_CATEGORY_CODE](../database-tables.md#menu_category_code) | SELECT / JOIN | CODE, CODE_DESCR (category) |
| [MENU_FAVORITE](../database-tables.md#menu_favorite) | SELECT / JOIN | MENU_ITEM_SEQ_NUM, MENU_USER, MENU_ORDER_NUM, ITEM_INACTIVE_DATE |

## Sample SQL

```sql
-- Retrieve a user's authorized menu items
SELECT DISTINCT
  ITM.MENU_ITEM_SEQ_NUM AS MenuItemSeqNum,
  USR.MENU_USER AS MenuUser,
  ITM.PAGE_ORDER_NUM AS MenuOrder,
  'N' AS FavoriteFlag,
  USR.MENU_USER_EMPLID AS MenuUserEmplid,
  ITM.MENU_CATEGORY_CODE AS MenuCategoryCode,
  CAT.CODE_DESCR AS Category,
  ITM.TOOL_TIP_TXT AS ToolTip,
  ITM.VISIBLE_FLAG AS VisibleFlag,
  PAG.MENU_PAGE_SEQ_NUM AS MenuPageSeqNum,
  PAG.PAGE_NAME AS PageName,
  PAG.PAGE_LINK_TXT AS PageLink,
  PAG.APPLICATION_CODE AS ApplicationCode,
  APP.CODE_DESCR AS ApplicationPath,
  PAG.FAVORITE_NAME AS FavoriteName,
  PAG.SAVE_PREFERENCES_FLAG AS SavePreferencesFlag,
  PAG.PRINT_FLAG AS PrintFlag,
  PAG.DOWNLOAD_FLAG AS DownloadFlag,
  PAG.HELP_FLAG AS HelpFlag,
  PAG.SAVE_FLAG AS SaveFlag,
  PAG.INSERT_FLAG AS InsertFlag,
  PAG.DELETE_FLAG AS DeleteFlag,
  PAG.PRINT_TIP_TXT AS PrintTip,
  PAG.DOWNLOAD_TIP_TXT AS DownloadTip,
  PAG.SAVE_TOOLTIP_TXT AS SaveTip,
  PAG.DELETE_TOOLTIP_TXT AS DeleteTip,
  PAG.INSERT_TOOLTIP_TXT AS InsertTip,
  'N' as UnsecuredFlag
FROM
  menu_item itm,
  menu_security sec,
  menu_security_user usr,
  MENU_PAGE PAG,
  BUSONLINE_APPS_CODE app,
  MENU_CATEGORY_CODE cat
WHERE
  SEC.MENU_ITEM_SEQ_NUM = ITM.MENU_ITEM_SEQ_NUM
  AND PAG.MENU_PAGE_SEQ_NUM = ITM.MENU_PAGE_SEQ_NUM
  AND APP.CODE = PAG.APPLICATION_CODE
  AND CAT.CODE = ITM.MENU_CATEGORY_CODE
  AND upper(USR.SECURITY_GROUP_TXT) = upper(SEC.SECURITY_GROUP_TXT)
  AND USR.MENU_USER = :MenuUser
UNION
SELECT
  ITM.MENU_ITEM_SEQ_NUM AS MenuItemSeqNum,
  :MenuUser AS MenuUser,
  ITM.PAGE_ORDER_NUM AS MenuOrder,
  'N' AS FavoriteFlag,
  NULL AS MenuUserEmplid,
  ITM.MENU_CATEGORY_CODE AS MenuCategoryCode,
  CAT.CODE_DESCR AS Category,
  ITM.TOOL_TIP_TXT AS ToolTip,
  ITM.VISIBLE_FLAG AS VisibleFlag,
  PAG.MENU_PAGE_SEQ_NUM AS MenuPageSeqNum,
  PAG.PAGE_NAME AS PageName,
  PAG.PAGE_LINK_TXT AS PageLink,
  PAG.APPLICATION_CODE AS ApplicationCode,
  APP.CODE_DESCR AS ApplicationPath,
  PAG.FAVORITE_NAME AS FavoriteName,
  PAG.SAVE_PREFERENCES_FLAG AS SavePreferencesFlag,
  PAG.PRINT_FLAG AS PrintFlag,
  PAG.DOWNLOAD_FLAG AS DownloadFlag,
  PAG.HELP_FLAG AS HelpFlag,
  PAG.SAVE_FLAG AS SaveFlag,
  PAG.INSERT_FLAG AS InsertFlag,
  PAG.DELETE_FLAG AS DeleteFlag,
  PAG.PRINT_TIP_TXT AS PrintTip,
  PAG.DOWNLOAD_TIP_TXT AS DownloadTip,
  PAG.SAVE_TOOLTIP_TXT AS SaveTip,
  PAG.DELETE_TOOLTIP_TXT AS DeleteTip,
  PAG.INSERT_TOOLTIP_TXT AS InsertTip,
  'Y' as UnsecuredFlag
FROM
  menu_item itm,
  MENU_PAGE PAG,
  BUSONLINE_APPS_CODE app,
  MENU_CATEGORY_CODE cat
WHERE
  PAG.MENU_PAGE_SEQ_NUM = ITM.MENU_PAGE_SEQ_NUM
  AND APP.CODE = PAG.APPLICATION_CODE
  AND CAT.CODE = ITM.MENU_CATEGORY_CODE
  AND NOT EXISTS (SELECT 1 FROM menu_security SEC
                  WHERE SEC.MENU_ITEM_SEQ_NUM = ITM.MENU_ITEM_SEQ_NUM)
UNION
SELECT
  ITM.MENU_ITEM_SEQ_NUM AS MenuItemSeqNum,
  :MenuUser AS MenuUser,
  fav.menu_order_num AS MenuOrder,
  'Y' AS FavoriteFlag,
  FAV.MENU_USER_EMPLID AS MenuUserEmplid,
  ITM.MENU_CATEGORY_CODE AS MenuCategoryCode,
  CAT.CODE_DESCR AS Category,
  ITM.TOOL_TIP_TXT AS ToolTip,
  ITM.VISIBLE_FLAG AS VisibleFlag,
  PAG.MENU_PAGE_SEQ_NUM AS MenuPageSeqNum,
  PAG.PAGE_NAME AS PageName,
  PAG.PAGE_LINK_TXT AS PageLink,
  PAG.APPLICATION_CODE AS ApplicationCode,
  APP.CODE_DESCR AS ApplicationPath,
  PAG.FAVORITE_NAME AS FavoriteName,
  PAG.SAVE_PREFERENCES_FLAG AS SavePreferencesFlag,
  PAG.PRINT_FLAG AS PrintFlag,
  PAG.DOWNLOAD_FLAG AS DownloadFlag,
  PAG.HELP_FLAG AS HelpFlag,
  PAG.SAVE_FLAG AS SaveFlag,
  PAG.INSERT_FLAG AS InsertFlag,
  PAG.DELETE_FLAG AS DeleteFlag,
  PAG.PRINT_TIP_TXT AS PrintTip,
  PAG.DOWNLOAD_TIP_TXT AS DownloadTip,
  PAG.SAVE_TOOLTIP_TXT AS SaveTip,
  PAG.DELETE_TOOLTIP_TXT AS DeleteTip,
  PAG.INSERT_TOOLTIP_TXT AS InsertTip,
  'N' as UnsecuredFlag
FROM
  menu_item itm,
  menu_favorite fav,
  MENU_PAGE PAG,
  BUSONLINE_APPS_CODE app,
  MENU_CATEGORY_CODE cat
WHERE
  ITM.MENU_ITEM_SEQ_NUM = FAV.MENU_ITEM_SEQ_NUM
  AND PAG.MENU_PAGE_SEQ_NUM = ITM.MENU_PAGE_SEQ_NUM
  AND APP.CODE = PAG.APPLICATION_CODE
  AND CAT.CODE = ITM.MENU_CATEGORY_CODE
  AND FAV.MENU_USER = :MenuUser
  AND FAV.ITEM_INACTIVE_DATE IS NULL
```

## Operations and processes

- [Resolve a user's authorized menu items](../operations/op-menu-01-resolve-authorized-menu-items.md)

## Business rules

- [BR-MENU-001](../business-rules.md#br-menu-001-scoped-vs-unfiltered-retrieval): Scoped vs. unfiltered retrieval
- [BR-MENU-002](../business-rules.md#br-menu-002-group-granted-authorization): Group-granted authorization
- [BR-MENU-003](../business-rules.md#br-menu-003-case-insensitive-group-matching): Case-insensitive group matching
- [BR-MENU-004](../business-rules.md#br-menu-004-unsecured-items-open-to-all): Unsecured items open to all
- [BR-MENU-005](../business-rules.md#br-menu-005-favorites-appear-in-the-authorized-set): Favorites appear in the authorized set
- [BR-MENU-006](../business-rules.md#br-menu-006-inactive-favorites-excluded): Inactive favorites excluded

> **Note:** Statements marked with `**` could not be confirmed; treat as unknown until verified.

## Sources
- SAIF.Business.Menu/clsMenuAuthorizedItemCollection.vb
