---
title: SAIF.Business.Menu architecture
summary: Architectural responsibilities, boundaries, and interaction patterns.
status: draft
owner: SAIF
last_reviewed: 2026-07-24
library: SAIF.Business.Menu
reference_type: package
---

# SAIF.Business.Menu architecture

SAIF.Business.Menu is a component-tier BOF business library (class library, no program entry point) that models the application's dynamic navigation menu system — menu items, pages, categories, per-user favorites, and menu-level access grouping (`SecurityGroup`) — consumed by front-end applications to render authorized navigation.

## Responsibilities
- Build and structure the hierarchical menu tree (items and pages) presented to users.
- Classify menu items by category.
- Manage per-user favorite menu-item bookmarks.
- Record menu-authorization data: which security group or individual user maps to which menu item.
- Scope menu structures by application (`clsApplicationCode`).

## Component boundaries
- `clsApplicationCode` / `clsApplicationCodeCollection`: code-table entity for application identifiers used to scope menus.
- `clsMenuItem` / `clsMenuItemCollection`: core menu-item entity (menu tree node) and its collection.
- `clsMenuPage` / `clsMenuPageCollection`: page-level grouping of menu items.
- `clsMenuCategoryCode` / `clsMenuCategoryCodeCollection`: code-table for menu categories.
- `clsMenuFavorite` / `clsMenuFavoriteCollection`: per-user favorite-menu-item bookmarks.
- `clsMenuAuthorizedItem` / `clsMenuAuthorizedItemCollection`: records which menu items a context/user is authorized to see (data record only, not a live security-framework check).
- `clsMenuSecurity` / `clsMenuSecurityCollection`: associates a menu item with a `SecurityGroup` string value, with a nested `Criteria` class supporting lookup by `MenuItemSeqNum`.
- `clsMenuSecurityUser` / `clsMenuSecurityUserCollection`: associates individual users with menu security records.
- `mdlUtilities`: shared helper functions for the menu library.

## Interaction model
- All persistence flows through the standard BOF `clsBusinessBase` + nested `Criteria` (`IBusinessCriteria`) + `IDataPortalInfo` pattern against an Oracle database.
- `clsMenuSecurity` / `clsMenuSecurityUser` model *data* about which security group or user is tied to a menu item; they do not themselves perform an authorization decision — no AD/WCF SecurityService call is present in this library. The actual gating decision is presumably made by a consuming presentation-layer/menu-rendering component using this data.*
- `clsMenuAuthorizedItem` similarly stores authorization-relevant data without enforcing it.
- No presentation-layer types, WCF, or Web API surface were detected in this library's own source.

## Architecture diagram
The following diagram shows the high-level component grouping within the library and how menu-authorization data flows to a consuming presentation layer.

```mermaid
flowchart TD
    AppCode[clsApplicationCode] --> MenuItem[clsMenuItem / clsMenuItemCollection]
    MenuItem --> MenuPage[clsMenuPage / clsMenuPageCollection]
    MenuItem --> CategoryCode[clsMenuCategoryCode]
    MenuItem --> Favorite[clsMenuFavorite]
    MenuItem --> AuthorizedItem[clsMenuAuthorizedItem]
    MenuItem --> MenuSecurity[clsMenuSecurity]
    MenuSecurity --> MenuSecurityUser[clsMenuSecurityUser]
    Framework[SAIF.BOF.Framework<br>clsBusinessBase] --> MenuItem
    MenuItem --> DB[(Oracle database)]
    MenuSecurity --> DB
    AuthorizedItem -.-> Presentation[Consuming presentation layer<br>enforces authorization]
    MenuSecurity -.-> Presentation
```

## Sequence diagram
The following diagram shows the primary sequence for retrieving a menu tree and its associated authorization data.

```mermaid
sequenceDiagram
    participant Caller as Presentation layer
    participant MenuItem as clsMenuItemCollection
    participant Security as clsMenuSecurity
    participant Oracle as Oracle database
    Caller->>MenuItem: Retrieve menu tree
    MenuItem->>Oracle: Execute RetrieveSQL
    Oracle-->>MenuItem: Menu item rows
    Caller->>Security: Retrieve SecurityGroup for MenuItemSeqNum
    Security->>Oracle: Execute RetrieveSQL
    Oracle-->>Security: SecurityGroup row
    Security-->>Caller: Authorization data (enforcement performed by caller)
```

## Design constraints
- Targets Oracle exclusively; no other database provider evidence was found.
- No security/authorization framework (`ISecurityManager`, `PrincipalContext`, AD) interaction was detected, despite class names (`clsMenuAuthorizedItem`, `clsMenuSecurity`, `clsMenuSecurityUser`) that strongly suggest a security domain; the `SecurityGroup` property is a plain persisted string data field, not an enforcement call.*
- No configuration framework (`IEnvironmentService`, `ConfigurationManager.AppSettings`, `DbConnectionManager`) interaction was detected.
- `Pipelines\build-vars.yml` declares `AppName` as `SAIF.BOF.Business` rather than `SAIF.BOF.Business.Menu`, an apparent copy/paste pipeline configuration defect flagged for the run coordinator/human reviewer.**
- Dependencies are resolved entirely as NuGet package references per the `.nuspec`; no local `<ProjectReference>`s were found.



## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Dependencies](dependencies.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)
- [Database tables](database-tables.md)
- [SQL catalog](sql/index.md)
- [API reference](api/index.md)

> **Note:** Statements marked with `*` were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts. Statements marked with `**` could not be confirmed; treat as unknown until verified.

## Sources
- `Business\SAIF.Business.Menu\clsApplicationCode.vb`
- `Business\SAIF.Business.Menu\clsMenuItem.vb`
- `Business\SAIF.Business.Menu\clsMenuItemCollection.vb`
- `Business\SAIF.Business.Menu\clsMenuPage.vb`
- `Business\SAIF.Business.Menu\clsMenuCategoryCode.vb`
- `Business\SAIF.Business.Menu\clsMenuFavorite.vb`
- `Business\SAIF.Business.Menu\clsMenuAuthorizedItem.vb`
- `Business\SAIF.Business.Menu\clsMenuSecurity.vb`
- `Business\SAIF.Business.Menu\clsMenuSecurityUser.vb`
- `Business\SAIF.Business.Menu\mdlUtilities.vb`
- `Business\SAIF.Business.Menu\Pipelines\build-vars.yml`
- `Business\SAIF.Business.Menu\SAIF.BOF.Business.Menu.nuspec`
