This page captures business rules enforced by this library. SAIF.Application is an abstraction/plumbing layer and implements no domain business rules (e.g., claim/policy validation, pricing, eligibility); the rules below are structural/behavioral constraints enforced by this library's own code.
A message is appended to AppManagerBase.Message only if it is non-empty and not already contained in the current message string.
Trigger
A concrete subclass calls AppendMessageLines with a single message, an array of messages, or an IEnumerable(Of String).
Enforcement
AppManagerBase.AppendMessageLines(ByVal inMessage As String)
Outcome
Empty strings are silently ignored; a message equal to a substring already present in Message is not re-appended, preventing duplicate/blank message noise in the accumulated display string.
An application manager's usable access level (IsAccessible, IsUpdateable, IsViewOnly, IsRestricted) is derived exclusively from the single AppSecurityRole value set via MarkUpdate(), MarkViewOnly(), or MarkNoAccess() (default NoAccess).
Trigger
A concrete subclass calls OnCheckSecurity() (its own implementation, not present in this library) and is expected to call one of the Mark* methods to set the resulting role.
Until a concrete subclass explicitly marks the role, the manager defaults to NoAccess (IsRestricted = True, IsAccessible = False), a fail-closed default.*
Source
SAIF.Application\AppManagerBase.vb
BR-APP-003 Cached AD resource authorization result¶
Field
Value
Statement
Once a resource name's authorization result has been obtained from the security principal, it is cached for the lifetime of the UserAccess-derived instance and is not re-queried.
Trigger
HasAccess(inResourceName) is called one or more times for the same resource name on the same instance.
Enforcement
UserAccess.HasAccess
Outcome
The first call for a given resource name incurs a live clsSecurityPrincipal.IsAuthorized check (delegating to SAIF.BOF.Framework); subsequent calls for the same resource name on the same instance return the cached boolean without re-checking, which could return a stale result if the underlying AD membership changes during the instance's lifetime.*
Every concrete AppManagerBase subclass must supply its own Retrieve() and Write() implementations (and the supporting On* hooks); AppManagerBase provides no default retrieve/write behavior.
Trigger
Instantiation of any concrete subclass and any call to the inherited Retrieve()/Write() members.
The VB.NET compiler prevents instantiation of any subclass that does not implement all of these members, guaranteeing every concrete application manager defines its own initialize/retrieve/write/transaction/security/context-validity behavior.
Rules in this section originate from base classes or services provided by dependency framework libraries. They are enforced by inherited behavior, not by code in this library. The originating class and library are recorded in each rule's Origin field.
Every concrete AppManagerBase subclass inherits a clsRulesManager instance (via Rules) that evaluates business rules in severity order and tracks broken rules, surfaced through IDataErrorInfo.†
Trigger
The inherited Rules collection is populated and evaluated as part of the base class's edit-session/save lifecycle (BeginEdit/ApplyEdit/Save).†
Broken rules block Save(), which throws ApplicationException if the object is invalid after rule evaluation.† No evidence in AppManagerBase.vb shows this inherited machinery being invoked directly by this library's own code — it is available to concrete subclasses but not wired up here.*
Origin
SAIF.Framework.Core — clsBusinessBase
Source
Retrieved from indexed documentation via Legends CLI
Note: Statements marked with † are derived from dependency library
documentation via the Legends CLI. Statements marked with * were inferred
from code structure or contextual evidence.