Skip to content

SAIF.Presentation.Web.Core.Infragistics111 security and authorization

This page documents authorization mechanisms implemented or consumed by this library. Authentication is handled entirely by infrastructure (NTLM/AD) and is not application-level — all code receives a WindowsIdentity on the request context.

Authorization architecture

This library performs no Active Directory group evaluation and no direct authorization decision of its own. Its security-relevant surface is entirely delegated authorization: NavigationContext loads the calling user's pre-resolved menu-authorization set (clsMenuAuthorizedItemCollection, owned by SAIF.Business.Menu) from the Oracle MENU schema and exposes lookup helpers that only ever return items present in that per-user set. A second, non-authorization security-adjacent behavior is the IsClientExternal environment check in AppViewPageBase.CallSessionPing, which suppresses the keep-alive session-ping script for external clients so external sessions are allowed to time out.

flowchart TD
    A["Authenticated request<br>(WindowsIdentity supplied by IIS)"] --> B["NavigationContext.New(userId)"]
    B --> C["clsMSOracleDataLayer<br>DB user MENU, env = MENU_ENVIRONMENT"]
    C --> D["clsMenuAuthorizedItemCollection<br>.GetMenuAuthorizedItems(user)"]
    D --> E["Per-user authorized item set"]
    E --> F["IsMenuItem / GetCurrentPage<br>page-level lookups"]
    E --> G["GetItem / GetCurrentItem / GetItemSeq<br>item-level lookups (visibleOnly)"]
    F --> H["Nothing / False when not authorized<br>caller enforces the deny"]
    G --> H

AD resource catalog

No AD resource names, LDAP paths, System.DirectoryServices usage, PrincipalContext/ GroupPrincipal usage, or <SAIFAuthorize> attributes exist anywhere in this library.

Resource name Purpose Enforcement point Source
(none) No Active Directory resource name is referenced in this library — —

Authorization for this library is database-group-based, not AD-group-based: the security groups that drive the menu set live in the Oracle MENU_SECURITY / MENU_SECURITY_USER tables and are resolved by SAIF.Business.Menu.

Authorization enforcement points

All enforcement in this library is programmatic and read-path only — every helper returns Nothing/False/0 rather than throwing or redirecting when the requested item is not in the user's authorized set. The actual deny action (redirect to the login screen) is taken by the consuming controller in SAIF.Presentation.Web.MVC.

Programmatic authorization checks

Class Method Resource / Role Check type Source
NavigationContext New(inUser) Per-user menu-authorization set (Oracle MENU schema) Authorization-set load SAIF.Presentation.Web.Core.Infragistics111\NavigationContext.vb (lines 168–172)
NavigationContext IsMenuItem(inApplication, inItem) Authorized menu item HasAccess (page-level) SAIF.Presentation.Web.Core.Infragistics111\NavigationContext.vb (lines 134–154)
NavigationContext GetCurrentPage() Authorized menu item HasAccess (page-level) SAIF.Presentation.Web.Core.Infragistics111\NavigationContext.vb (lines 156–178)
NavigationContext GetCurrentItem(inCategory) Authorized menu item (visible only) HasAccess (item-level) SAIF.Presentation.Web.Core.Infragistics111\NavigationContext.vb (lines 112–132)
NavigationContext GetItem(inCategory, inLink, inAnyApp) Authorized menu item (visible only) HasAccess (item-level) SAIF.Presentation.Web.Core.Infragistics111\NavigationContext.vb (lines 86–110)
NavigationContext GetItemSeq(inApplication, inCategory, inPageLink) Authorized menu item HasAccess (item-level) SAIF.Presentation.Web.Core.Infragistics111\NavigationContext.vb (lines 68–84)
AppViewPageBase CallSessionPing() n/a — session-lifetime gate, not an authorization check IsClientExternal audience discriminator SAIF.Presentation.Web.Core.Infragistics111\AppViewPageBase.aspx.vb (lines 176–201)

Enforcement point 7 (CallSessionPing) is an environment/audience discriminator supplied by AppGlobal.EnvironmentService (an external SAIF framework dependency not present in this repository), not an identity check. Its security effect is that internal sessions are kept alive indefinitely while EnableSessionPing is True (the default set in Page_Init), whereas external sessions are not.* A commented-out predecessor of the same check tested Model.Context.SecurityPrincipal.Domain.ToString = "SAIF"; per analysis rules the commented form is not treated as a finding.

Data-level authorization

Entity type Validation method Mechanism Source
clsMenuAuthorizedItem (user-scoped retrieval) NavigationContext.New → GetMenuAuthorizedItems(m_DPI, inUser.Trim.ToUpper) The authorization set is filtered at the database by menu user rather than filtered in memory after a broad read; the user name is normalized (trimmed, upper-cased) before it is bound to the :MenuUser bind variable in SAIF.Business.Menu SAIF.Presentation.Web.Core.Infragistics111\NavigationContext.vb (line 171)
clsMenuAuthorizedItem (visibility filtering) ItemByCategory / ItemExact / Item Hidden items are excluded from item-level resolution even when the user is authorized to the item, via the visibleOnly:=True argument SAIF.Presentation.Web.Core.Infragistics111\NavigationContext.vb (lines 93, 103, 105, 128, 130)
clsApplicationCode (application scoping) ApplicationCodes.ItemByAppPath(Request.ApplicationPath) An item is only resolvable when the current virtual directory maps to a registered, active application code; ApplicationCodes is backed by clsApplicationCodeCollection.GetActiveApplicationCodes and cached in a Static local for the life of the app domain SAIF.Presentation.Web.Core.Infragistics111\NavigationContext.vb (lines 43–49, 96–101, 118–126, 163–171)

The application-code cache is a Static (per-app-domain, process-wide) cache and is not per user; only the MenuAuthorizedItems collection is user-specific. No cross-user leakage results, because the cached data (application codes and category codes) is reference data with no user dimension.*

No entity-ownership validation (policy/claim/account belongs to the caller), no composite identity-attribute + resource checks, and no WCF SecurityService usage exist in this library.

Segregation of duties

No segregation-of-duties rules are present in this library.

Security interfaces and contracts

This library defines no security-specific interfaces or base classes; NavigationContext is a concrete data-access/lookup class, not an abstraction consumed elsewhere for security purposes.

Notes

  • 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.
  • AppGlobal.EnvironmentService.IsClientExternal is provided by an external SAIF framework package that is not present in this repository, so the concrete rule that classifies a client as external cannot be confirmed here.**
  • The library never verifies that the user name passed to NavigationContext.New matches the authenticated identity; that responsibility sits with callers (SAIF.Presentation.Web.MVC passes Model.Context.UserID, and SAIF.Presentation.Web.Controls.V2.Menu passes Request.LogonUserIdentity.Name). A caller supplying an arbitrary user name would obtain that user's menu set.*

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
  • SAIF.Presentation.Web.Core.Infragistics111\AppViewPageBase.aspx.vb
  • SAIF.Presentation.Web.Core.Infragistics111\AppViewMasterPageBase.vb
  • SAIF.Presentation.Web.Core.Infragistics111\clsControlManager.vb
  • SAIF.Presentation.Web.Core.Infragistics111\SAIF.Presentation.Web.Core.Infragistics111.vbproj
  • SAIF.Business.Menu\clsMenuAuthorizedItemCollection.vb
  • SAIF.Business.Menu\clsMenuAuthorizedItem.vb