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 aSecurityGroupstring value, with a nestedCriteriaclass supporting lookup byMenuItemSeqNum.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+ nestedCriteria(IBusinessCriteria) +IDataPortalInfopattern against an Oracle database. clsMenuSecurity/clsMenuSecurityUsermodel 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.*clsMenuAuthorizedItemsimilarly 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; theSecurityGroupproperty is a plain persisted string data field, not an enforcement call.* - No configuration framework (
IEnvironmentService,ConfigurationManager.AppSettings,DbConnectionManager) interaction was detected. Pipelines\build-vars.ymldeclaresAppNameasSAIF.BOF.Businessrather thanSAIF.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
- Overview
- Dependencies
- Operations and processes
- Business rules
- Database tables
- SQL catalog
- API reference
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.vbBusiness\SAIF.Business.Menu\clsMenuItem.vbBusiness\SAIF.Business.Menu\clsMenuItemCollection.vbBusiness\SAIF.Business.Menu\clsMenuPage.vbBusiness\SAIF.Business.Menu\clsMenuCategoryCode.vbBusiness\SAIF.Business.Menu\clsMenuFavorite.vbBusiness\SAIF.Business.Menu\clsMenuAuthorizedItem.vbBusiness\SAIF.Business.Menu\clsMenuSecurity.vbBusiness\SAIF.Business.Menu\clsMenuSecurityUser.vbBusiness\SAIF.Business.Menu\mdlUtilities.vbBusiness\SAIF.Business.Menu\Pipelines\build-vars.ymlBusiness\SAIF.Business.Menu\SAIF.BOF.Business.Menu.nuspec