---
title: Load security grants for an item
summary: Loads the security grants recorded for one menu item, or all grants when no item is supplied. This is the lazily-loaded `SecurityGroups` child collection of `clsMenuItem`.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-08-17
library: SAIF.Business.Menu
reference_type: package
operation_id: OP-MENU-10
trigger: First access of `clsMenuItem.SecurityGroups`, or a direct call to `GetMenuSecuritiesForItem`
---

# Load security grants for an item

Loads the security grants recorded for one menu item, or all grants when no item is supplied. This is the lazily-loaded `SecurityGroups` child collection of `clsMenuItem`.

| Field | Value |
| --- | --- |
| **Operation ID** | OP-MENU-10 |
| **Trigger** | First access of `clsMenuItem.SecurityGroups`, or a direct call to `GetMenuSecuritiesForItem` |
| **Inputs** | `IDataPortalInfo`, menu item sequence number |
| **Outputs** | Populated `clsMenuSecurityCollection` |
| **Primary components** | `clsMenuSecurityCollection.GetMenuSecuritiesForItem` |
| **Entry point** | `SAIF.Business.Menu/clsMenuSecurityCollection.vb` |

## Steps

1. Build `Criteria(dpi, menuItemSeqNum)`.
2. `BeforeRetrieve`: when `MenuItemSeqNum > 0` use `RetrieveForItemSQL` ([SQL-028](../sql/SQL-028-retrieve-menu-security-for-item.md)) with `AddParm("MenuItemSeqNum", …)`; otherwise retrieve all grants ([SQL-027](../sql/SQL-027-retrieve-all-menu-security.md)). ([BR-MENU-001](../business-rules.md#br-menu-001-scoped-vs-unfiltered-retrieval); table [MENU_SECURITY](../database-tables.md#menu_security))
3. `AfterRetrieve` loads one `clsMenuSecurity` per row. This collection is the lazily-loaded `SecurityGroups` child of `clsMenuItem`.

## Process flow

```mermaid
flowchart TD
    Start([clsMenuItem.SecurityGroups accessed / GetMenuSecuritiesForItem called]) --> Choice{MenuItemSeqNum > 0?}
    Choice -->|Yes| ByItem["RetrieveForItemSQL: WHERE MENU_ITEM_SEQ_NUM = :MenuItemSeqNum"]
    Choice -->|No| All[Unfiltered: retrieve all security grants]
    ByItem --> Load[AfterRetrieve: Load each clsMenuSecurity]
    All --> Load
    Load --> Done([Return populated collection])
```

## Failure and edge-case behavior
- No security grants recorded for the item: an empty collection is returned, meaning the item is unsecured for all users.

## Related documentation
- [Operations and processes](../operations-processes.md)
- [Business rules](../business-rules.md)
- [SQL catalog](../sql/index.md)
- [Database tables](../database-tables.md)

## Sources
- SAIF.Business.Menu/clsMenuSecurityCollection.vb
- SAIF.Business.Menu/clsMenuItem.vb
