Skip to content

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.

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.

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.

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