SAIF.Business.Menu architecture¶
SAIF.Business.Menu is a mid-tier SAIF BOF business layer that models the application's navigation menu and computes which menu items are authorized for display through a database-table-driven security-group model. It performs no HTTP, UI, or session handling; callers supply IDataPortalInfo, and the library returns persisted business objects or authorized-menu projections.
Responsibilities¶
- Define and persist application codes, menu categories, menu pages, and menu items.
- Persist the item-to-group and user-to-group rows that drive authorization.
- Build the authorized menu as the union of group-authorized items, public items, and active favorites.
- Cascade menu-item validation and save behavior to the child security-group collection.
Component boundaries¶
- Reference data:
clsApplicationCodeandclsMenuCategoryCode. - Menu structure:
clsMenuPageandclsMenuItem. - Authorization data:
clsMenuSecurityandclsMenuSecurityUser. - Authorized-menu projection:
clsMenuAuthorizedItemCollection. - Favorites:
clsMenuFavorite. - Utility support:
mdlUtilities.AddToList.
Interaction model¶
- Callers request
GetMenuAuthorizedItemsorGetAllMenuAuthorizedItems. - The data-portal lifecycle selects the appropriate Oracle SQL.
- The returned rowset is materialized into
clsMenuAuthorizedItemobjects. - Callers use
Favorites,ApplicationItems,AppItemsByCategory, andSecuredAppItemswithout issuing new authorization SQL. - Administrative callers use the entity and collection classes directly to maintain lookup, page, item, favorite, and membership rows.
Architecture diagram¶
The following diagram shows the high-level component interactions within the library.
flowchart TD
Caller[Calling layer] --> Auth[clsMenuAuthorizedItemCollection]
Auth --> DB[(Oracle menu tables)]
Auth --> Views[In-memory filtered views]
Admin[Administrative caller] --> Item[clsMenuItem]
Item --> Sec[clsMenuSecurityCollection]
Sec --> DB
Admin --> Ref[Lookup and page classes]
Ref --> DB
Sequence diagram¶
The following diagram shows the primary request/response sequence for building a user's authorized menu.
sequenceDiagram
participant Caller
participant Menu as clsMenuAuthorizedItemCollection
participant Portal as IDataPortalInfo
participant Oracle as Oracle
Caller->>Menu: GetMenuAuthorizedItems(dataPortal, menuUser)
Menu->>Portal: BeforeRetrieve
Portal->>Oracle: Execute authorized-menu SQL
Oracle-->>Portal: Result rows
Portal-->>Menu: AfterRetrieve loads rows
Menu-->>Caller: Authorized menu collection
Design constraints¶
- Authorization is enforced by Oracle SQL over
MENU_SECURITYandMENU_SECURITY_USER, not by AD-resource lookups. - Items with no
MENU_SECURITYrow are public by default through BR-MENU-002. - Group matching is case-insensitive through BR-MENU-003.
- Favorites participate in menu composition through BR-MENU-004.
- Menu-item validation and dirty tracking cascade to child security groups through BR-MENU-005.
- The library targets Oracle-only SQL syntax (
NEXTVAL,SYSDATE,NVL,:ParamName).
Related documentation¶
- Index
- Overview
- Dependencies
- Operations and processes
- Business rules
- Security and authorization
- Database tables
- SQL catalog
- API reference
Sources¶
SAIF.Business.Menu\clsApplicationCode.vbSAIF.Business.Menu\clsMenuAuthorizedItemCollection.vbSAIF.Business.Menu\clsMenuFavorite.vbSAIF.Business.Menu\clsMenuItem.vbSAIF.Business.Menu\clsMenuPage.vbSAIF.Business.Menu\clsMenuSecurity.vbSAIF.Business.Menu\clsMenuSecurityUser.vbSAIF.Business.Menu\mdlUtilities.vbSAIF.Business.Menu\\SAIF.Business.Menu.vbproj