Skip to content

SAIF.Business.View.Policy 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

Authorization is centralized in clsPolicySecurity, which applies a two-tier decision for policy access: a coarse Active Directory gate for secure SAIF policies, followed by a user-type-specific authorization matrix that evaluates direct ownership, group membership, auditor assignment, loss-control assignment, or parent-policy fallback. The implementation splits enforcement across Oracle for auditor checks and SQL Server BDS for group, loss-control, and agent policy-list lookups.

flowchart TD
    Caller[Calling code] --> Gate{Secure policy?}
    Gate -- No --> Matrix["Per-user-type authorization<br>matrix"]
    Gate -- Yes --> AD[AD resource check<br>SAIFpolicyInfo]
    AD -- Deny --> Denied[Access denied]
    AD -- Allow --> Matrix
    Matrix --> Oracle[Oracle engine<br>auditor checks]
    Matrix --> BDS[SQL Server BDS engine<br>group, loss-control, agent checks]
    Matrix --> Parent[Parent-policy fallback<br>for policyholders]
    Oracle --> Decision{Authorized?}
    BDS --> Decision
    Parent --> Decision
    Decision -- Yes --> Allowed[Access allowed]
    Decision -- No --> Denied

AD resource catalog

Resource name Purpose Enforcement point Source
SAIFpolicyInfo Grants access to policies flagged with the SAIF secure policy code clsPolicySecurity.IsPolicyValidForUser SAIF.Business.View.Policy/clsPolicySecurity.vb

Authorization enforcement points

Programmatic authorization checks

Class Method Resource / Role Check type Source
clsPolicySecurity IsPolicyValidForUser(ByRef inPolicyData As clsPolicyData) Policy visibility decision HasAccess SAIF.Business.View.Policy/clsPolicySecurity.vb
clsPolicySecurity IsPolicyValidForUser(ByRef inPolicyData As clsPolicyData) SAIFpolicyInfo IsAuthorized SAIF.Business.View.Policy/clsPolicySecurity.vb
clsPolicySecurity IsPolicyValidForUser(ByVal inPolicyNum As Decimal) Policy visibility decision HasAccess SAIF.Business.View.Policy/clsPolicySecurity.vb
clsPolicySecurity IsPolicyValidForParentPolicy Parent policyholder relationship HasAccess SAIF.Business.View.Policy/clsPolicySecurity.vb
clsPolicySecurity CanSafetyConsultantAccessPolicy Loss-control consultant assignment HasAccess SAIF.Business.View.Policy/clsPolicySecurity.vb
clsPolicySecurity CanAuditorAccessPolicy Auditor vendor assignment within the 60-day window HasAccess SAIF.Business.View.Policy/clsPolicySecurity.vb
clsPolicySecurity IsInGroup Group / chapter membership HasAccess SAIF.Business.View.Policy/clsPolicySecurity.vb
clsPolicySecurity PolicyList User-selectable accessible policy set HasAccess SAIF.Business.View.Policy/clsPolicySecurity.vb
clsPolicySecurity ConvertUserTypeToUserAccessLevel Demo vs. non-demo access tiering HasAccess SAIF.Business.View.Policy/clsPolicySecurity.vb

User-type authorization matrix

User type Authorization rule Related business rules Source
SAIF employee Always allowed after the secure-policy AD gate BR-VP-003: Secure policy requires AD authorization, BR-VP-005: Access granted per user-access-level matrix SAIF.Business.View.Policy/clsPolicySecurity.vb
MCO Always allowed after the secure-policy AD gate BR-VP-003: Secure policy requires AD authorization, BR-VP-005: Access granted per user-access-level matrix SAIF.Business.View.Policy/clsPolicySecurity.vb
Medical provider Always allowed after the secure-policy AD gate BR-VP-003: Secure policy requires AD authorization, BR-VP-005: Access granted per user-access-level matrix SAIF.Business.View.Policy/clsPolicySecurity.vb
Bookkeeper Always allowed after the secure-policy AD gate BR-VP-003: Secure policy requires AD authorization, BR-VP-005: Access granted per user-access-level matrix SAIF.Business.View.Policy/clsPolicySecurity.vb
Agent / DemoAgent User number must match AgentNum or AgencySeqNum on the policy BR-VP-005: Access granted per user-access-level matrix SAIF.Business.View.Policy/clsPolicySecurity.vb, SAIF.Business.View.Policy/clsPolicyData.vb, SAIF.Business.View.Policy/clsAgency.vb
Policyholder / DemoPolicyholder Direct policy match or parent-policy fallback association is required BR-VP-004: Invalid or zero policy number is never valid, BR-VP-005: Access granted per user-access-level matrix, BR-VP-009: Fallback to parent-policy authorization SAIF.Business.View.Policy/clsPolicySecurity.vb
Group / DemoGroup Group/chapter lookup in BDS must confirm policy membership BR-VP-005: Access granted per user-access-level matrix SAIF.Business.View.Policy/clsPolicySecurity.vb
Loss control / DemoLossControl Team-assignment user name prefix must match, with UserIdName used for demo users BR-VP-005: Access granted per user-access-level matrix, BR-VP-007: Loss control prefix match, BR-VP-008: Demo loss control matched on UserIdName SAIF.Business.View.Policy/clsPolicySecurity.vb, SAIF.Business.View.Policy/clsTeamAssignment.vb
Auditor / DemoAuditor Auditor vendor must be attached to an eligible audit within the 60-day window BR-VP-005: Access granted per user-access-level matrix, BR-VP-006: Auditor 60-day access window SAIF.Business.View.Policy/clsPolicySecurity.vb, SAIF.Business.View.Policy/clsPolicyData.vb
Quick-file user No branch grants access, so access is denied BR-VP-005: Access granted per user-access-level matrix SAIF.Business.View.Policy/clsPolicySecurity.vb

Access-level ordinals

Access level Ordinal Purpose Source
SAIFEmployee 1000 Highest internal policy-view tier SAIF.Business.View.Policy/clsPolicySecurity.vb
Auditor 900 Standard auditor tier SAIF.Business.View.Policy/clsPolicySecurity.vb
DemoAuditor 850 Demo auditor tier for masked views SAIF.Business.View.Policy/clsPolicySecurity.vb
Losscontrol 800 Standard loss-control tier SAIF.Business.View.Policy/clsPolicySecurity.vb
DemoLossControl 750 Demo loss-control tier for masked views SAIF.Business.View.Policy/clsPolicySecurity.vb
Agent 700 Standard agent tier SAIF.Business.View.Policy/clsPolicySecurity.vb
DemoAgent 650 Demo agent tier for masked views SAIF.Business.View.Policy/clsPolicySecurity.vb
Group 600 Standard group tier SAIF.Business.View.Policy/clsPolicySecurity.vb
DemoGroup 550 Demo group tier for masked views SAIF.Business.View.Policy/clsPolicySecurity.vb
Policyholder 500 Standard policyholder tier SAIF.Business.View.Policy/clsPolicySecurity.vb
DemoPolicyholder 450 Demo policyholder tier for masked views SAIF.Business.View.Policy/clsPolicySecurity.vb
QuickFileUser 300 Lowest tier; used to detect reduced access behavior SAIF.Business.View.Policy/clsPolicySecurity.vb

Data-level authorization

Entity type Validation method Mechanism Source
Policy clsPolicySecurity.IsPolicyValidForUser Secure-policy AD gate plus user-type matrix SAIF.Business.View.Policy/clsPolicySecurity.vb
Policyholder parent relationship clsPolicySecurity.IsPolicyValidForParentPolicy Parent-policy association fallback for policyholders SAIF.Business.View.Policy/clsPolicySecurity.vb
Loss-control assignment clsPolicySecurity.CanSafetyConsultantAccessPolicy Prefix comparison against team assignment identity SAIF.Business.View.Policy/clsPolicySecurity.vb, SAIF.Business.View.Policy/clsTeamAssignment.vb
Auditor assignment clsPolicySecurity.CanAuditorAccessPolicy Oracle count query across PA_AUDIT, PA_AUDITOR, and PA_POLICY_PERIOD SAIF.Business.View.Policy/clsPolicySecurity.vb
Demo data masking clsPolicyData.IsDemoUser, object-level MaskData properties Presentation-side masking with clsConstants.DataMaskingConstants SAIF.Business.View.Policy/clsPolicyData.vb, SAIF.Business.View.Policy/clsPolicyAddress.vb, SAIF.Business.View.Policy/clsAgency.vb, SAIF.Business.View.Policy/clsTeamAssignment.vb

Demo users see masked policy, address, agency, and team-assignment data per BR-VP-010: Demo users see masked data. The masking occurs after data retrieval, so raw values still travel from the database into process memory before the library rewrites presentation-facing fields.

Segregation of duties

No segregation-of-duties rules were found. This is consistent with the library's read-only design and BR-VP-027: Create/Insert/Update/Delete SQL are invalid.

Security interfaces and contracts

Interface / Class Role Consumers Source
clsPolicySecurity Central authorization service for policy-scoped access decisions and accessible policy lists Calling business/view code* SAIF.Business.View.Policy/clsPolicySecurity.vb
IPolicySecurityDataProvider Unimplemented abstraction for supplying policy-security fields independently of clsPolicyData* No implementers found in this repository* SAIF.Business.View.Policy/clsPolicySecurity.vb
clsSecurityPrincipal Ambient identity and authorization dependency supplying user type, user number, user name, group chapter, and AD checks clsPolicySecurity SAIF.Business.View.Policy/clsPolicySecurity.vb
clsUserType Maps security-principal context into application user categories and demo flags clsPolicySecurity SAIF.Business.View.Policy/clsPolicySecurity.vb

Note: Statements marked with * were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts.

Sources

  • SAIF.Business.View.Policy/clsAgency.vb
  • SAIF.Business.View.Policy/clsPolicyAddress.vb
  • SAIF.Business.View.Policy/clsPolicyData.vb
  • SAIF.Business.View.Policy/clsPolicySecurity.vb
  • SAIF.Business.View.Policy/clsTeamAssignment.vb