NavigationContext¶
NavigationContext is the only type in this library that reaches a database. On construction it opens an Oracle connection through clsMSOracleDataLayer as the MENU schema user (environment named by the MENU_ENVIRONMENT app setting) and loads the calling user's full set of authorized menu items via clsMenuAuthorizedItemCollection.GetMenuAuthorizedItems (owned by SAIF.Business.Menu). Every subsequent lookup method answers navigation and page-authorization questions purely against that in-memory, per-user authorized-item set — it never re-queries the database and never performs its own authorization decision beyond "is this item present in the set I already loaded".
Purpose¶
- Resolve, at construction time, the complete set of menu items a given user is authorized to see, scoped by application code and visibility.
- Answer "is this page/item authorized for the current user" (
IsMenuItem,GetCurrentPage,GetCurrentItem,GetItem,GetItemSeq) without any further database access. - Derive the current application code from the request's virtual directory (
ApplicationCodes.ItemByAppPath) so navigation answers are correctly scoped per hosted application.
Context¶
- Namespace:
SAIF.Presentation.Web.Core - Assembly/package:
SAIF.Presentation.Web.Core.Infragistics111(merged intoSAIF.Presentation.Web.Infragistics111.dllviaSAIF.BOF.Presentation.Web.Infragistics111.nuspec)
Public members¶
| Member | Signature | Purpose |
|---|---|---|
New(inUser As String) |
Public Sub New(inUser As String) |
Opens the MENU-schema Oracle data layer for the environment named by MENU_ENVIRONMENT, normalizes inUser (trim, upper-case), and loads that user's full authorized menu-item set into memory. |
MenuAuthorizedItems |
Public ReadOnly Property MenuAuthorizedItems As clsMenuAuthorizedItemCollection |
The in-memory, per-user collection of authorized menu items loaded at construction; the source of truth for every other lookup on this instance. |
IsMenuItem(inApplication, inItem) |
Public Function IsMenuItem(inApplication As String, inItem As String) As Boolean |
Returns True only when inItem is present in the authorized set for the resolved application code, by resolving the application code via ApplicationCodes.ItemByAppPath and calling MenuAuthorizedItems.FindPage. |
GetCurrentPage() |
Public Function GetCurrentPage() As clsMenuAuthorizedItem |
Derives the application code and page link from Request.ApplicationPath/Request.RawUrl, then returns the matching authorized item (FindPageExact with FindPage fallback), or Nothing if the current page is not in the set. |
GetCurrentItem(inCategory) |
Public Function GetCurrentItem(inCategory As String) As clsMenuAuthorizedItem |
Returns the authorized, visible item for the given category on the current page (ItemExact then Item, both visibleOnly:=True), or Nothing if none matches. |
GetItem(inCategory, inLink, inAnyApp) |
Public Function GetItem(inCategory As String, inLink As String, Optional inAnyApp As Boolean = False) As clsMenuAuthorizedItem |
Returns the authorized, visible item matching the category and link, optionally searching across all applications (ItemByCategory) rather than only the current one, or Nothing if none matches. |
GetItemSeq(inApplication, inCategory, inPageLink) |
Public Function GetItemSeq(inApplication As String, inCategory As String, inPageLink As String) As Integer |
Returns the MenuItemSeqNum of the matching authorized item, or 0 if the item is not in the authorized set. |
Behavioral notes¶
- The user name passed to
Newis normalized (.Trim.ToUpper) before being bound as the:MenuUserquery parameter, butNavigationContextnever independently verifies that the supplied name matches the current authenticated identity — callers are responsible for passing the correct identity.* ApplicationCodesis cached in aStatic(per-app-domain, process-wide) local rather than per-instance, so application-code resolution is shared reference data with no user dimension and carries no cross-user leakage risk.*- Every lookup method returns
Nothing/False/0rather than throwing when the requested item is not authorized; the deny action (e.g. redirect to login) is the responsibility of the calling controller, not this type.
Constraints and usage notes¶
- Construction performs a live Oracle round-trip (
clsMSOracleDataLayeragainstMENU_ENVIRONMENT); callers should treatNew NavigationContext(...)as an I/O operation, not a cheap in-memory constructor. MENU_ENVIRONMENTmust be present in the hosting application's<appSettings>; it is read viaConfigurationManager.AppSettings.Getwith no null guard, so a missing key produces an unusable environment name at construction time.*
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¶
SAIF.Presentation.Web.Core.Infragistics111/NavigationContext.vb