---
title: Configuration settings
summary: Configuration keys consumed by this library, retrieval methods, and runtime dependencies.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-07-31
library: SAIF.Business.View.Policy
reference_type: package
---

# SAIF.Business.View.Policy configuration settings

`SAIF.Business.View.Policy` reads three configuration settings, all through the SAIF Environment API service and all in one method. Together they describe a second, non-Oracle data store — referred to in the source as BDS — that backs policy-group authorization. Every other database call in the library uses the Oracle data portal supplied by the caller, so the library itself configures no Oracle connection.

This is architecturally significant. The BDS connection is assembled directly from the three settings rather than resolved through the framework's `DbConnectionManager`, so it does not appear in framework-level connection inventories, and it is used from an authorization path ([BR-006](business-rules.md#br-006-group-users-see-only-policies-in-their-group-or-chapter) and [BR-018](business-rules.md#br-018-agent-policy-lists-are-produced-only-for-numeric-agent-identifiers)). A misconfiguration therefore fails as a security-relevant runtime error rather than as a clear configuration error.*

## Configuration retrieval methods

| Method | Class / Interface | Namespace | Usage pattern |
| --- | --- | --- | --- |
| `GetConfigSetting` | `IEnvironmentService`, reached through `AppGlobal.EnvironmentService` | `SAIF.Framework.Security` | Three consecutive calls in `clsPolicySecurity.Initialize`; the values are passed positionally into a `clsSQLDataLayer` constructor and the resulting data portal is cached on the instance. |
| `GetSecureConfigSetting` | `IEnvironmentService` | `SAIF.Framework.Security` | Not used. |
| `ConfigurationManager.AppSettings` | — | `System.Configuration` | Not used. |
| `DbConnectionManager` | — | SAIF framework | Not used. The SQL Server connection is assembled inside `clsSQLDataLayer`; Oracle connections arrive with the caller-supplied data portal. |
| `ApplicationSettingsBase` | `MySettings` | `SAIF.Business.View.Policy.Tests.My` | Test project only; the designer scaffolding is empty and no library code reads it. |

No dependency-injection registration exists in this library. `AppGlobal.EnvironmentService` is a static ambient accessor initialised by the hosting application.*

## Environment API settings

Settings retrieved through `IEnvironmentService`, the centralized environment configuration service.

| Setting key | Method | Data type | Purpose | Consuming class | Source |
| --- | --- | --- | --- | --- | --- |
| `BDS_USER` | `GetConfigSetting` | String | Database login used for the BDS SQL Server connection.* | `clsPolicySecurity` | `Business/SAIF.Business.View.Policy/clsPolicySecurity.vb` |
| `bdsDatabase` | `GetConfigSetting` | String | SQL Server host or instance name for the BDS store.* | `clsPolicySecurity` | `Business/SAIF.Business.View.Policy/clsPolicySecurity.vb` |
| `BDS_DATABASENAME` | `GetConfigSetting` | String | SQL Server catalog name for the BDS store.* | `clsPolicySecurity` | `Business/SAIF.Business.View.Policy/clsPolicySecurity.vb` |

The roles above are read from the parameter positions of the `clsSQLDataLayer(user, server, databaseName, userName)` constructor. The setting names themselves do not make the mapping obvious, and `bdsDatabase` in particular carries the server name rather than the database name.*

All three values vary by environment, since each names an environment-specific account, host, or catalog.

## AppSettings (Web.config)

Neither `app.config` nor `Web.config` declares an `appSettings` section, and there are no `ConfigurationManager.AppSettings` call sites in this library.

## Database connection configuration

| Connection name | Provider | Retrieval method | Purpose | Source |
| --- | --- | --- | --- | --- |
| BDS SQL Server connection | SQL Server, through `clsSQLDataLayer` | `GetConfigSetting` for `BDS_USER`, `bdsDatabase`, and `BDS_DATABASENAME` | Backs the group-membership procedure `cp_policy_in_group` and the agent, loss-control, and group policy-list queries ([Authorize a policy for the current user](operations/authorize-policy-for-user.md), [Build the permitted policy list](operations/build-permitted-policy-list.md)). | `Business/SAIF.Business.View.Policy/clsPolicySecurity.vb` |
| Oracle policy portal | Oracle, ODP.NET managed driver | Supplied by the caller as an `IDataPortalInfo` | Backs every statement in the [SQL catalog](sql/index.md) and every [stored procedure](procedures/index.md) call. | Hosting application** |

The tables reached through the BDS connection are not named in this library's source, so they cannot be cataloged on the [Database tables](database-tables.md) page.**

## Secure settings

No secure settings are read. `BDS_USER` is retrieved in plain text and no password setting is read anywhere in the library, which implies either trusted authentication or credential resolution inside `clsSQLDataLayer`.*

## Custom configuration sections

| Section name | Handler type | Purpose |
| --- | --- | --- |
| `oracle.manageddataaccess.client` | `OracleInternal.Common.ODPMSectionHandler`, `Oracle.ManagedDataAccess` 4.122.21.1 | Declares the ODP.NET managed driver section in both `app.config` and `Web.config`. The declaration pins the assembly version but supplies no section body.* |

Both configuration files also register `Oracle.ManagedDataAccess.Client` as a provider factory. `app.config` additionally carries assembly binding redirects for `Newtonsoft.Json`, `RestSharp`, `System.Web.Http`, `System.Net.Http.Formatting`, `System.Text.Json`, and `System.Runtime.CompilerServices.Unsafe`.

## Transitive configuration (from dependencies)

| Setting key | Method | Source dependency | Dependency type | Purpose |
| --- | --- | --- | --- | --- |
| Unresolved | `GetConfigSetting` | `SAIF.BOF.Framework` | NuGet | Supplies `AppGlobal`, `IEnvironmentService`, `clsSQLDataLayer`, and the data-portal infrastructure. The host must initialise the Environment API and the Oracle portal; the specific keys are not visible from this repository.** |
| Unresolved | — | `SAIF.BOF.Business` and the other SAIF BOF business packages | NuGet | Configuration requirements are not documented in this repository.** |

## Configuration dependencies

| Dependency | Type | Required at | Impact if missing |
| --- | --- | --- | --- |
| `AppGlobal.EnvironmentService` | Ambient service | First authorization call | `clsPolicySecurity.Initialize` cannot read any setting, so no authorization decision that needs the BDS store can be made.* |
| `BDS_USER`, `bdsDatabase`, `BDS_DATABASENAME` | Environment API settings | First authorization call | The values are passed straight into the data layer with no validation or fallback. A missing or wrong value produces an unusable connection and a runtime failure at the first query rather than a clear configuration error.* |
| Caller-supplied `IDataPortalInfo` | Data portal | Every retrieval | Without it no Oracle read in this library can execute. |
| ODP.NET managed driver 4.122.21.1 | Assembly and config section | Runtime | The pinned provider must be deployed for Oracle access to resolve.* |

## Configuration risks

- The three settings are required but unvalidated, so misconfiguration surfaces late and as a database error.*
- Key naming is inconsistent: `BDS_USER` and `BDS_DATABASENAME` are upper snake case while `bdsDatabase` is camel case. A case-sensitive environment store makes this an easy mistake.*
- The BDS connection bypasses `DbConnectionManager`, so it will not appear in framework-level connection inventories or be managed alongside other connections.*
- Because the BDS store answers an authorization question, a misconfiguration has a security-relevant failure mode: group membership cannot be evaluated and access is refused ([BR-006](business-rules.md#br-006-group-users-see-only-policies-in-their-group-or-chapter)).*
- What the BDS store is, which system owns it, and how the `BDS_USER` login authenticates are not determinable from this repository.**

> **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.

## Related documentation

- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)
- [Security and authorization](security-authorization.md)
- [Database tables](database-tables.md)
- [SQL catalog](sql/index.md)
- [Procedures](procedures/index.md)
- [API reference](api/index.md)

## Sources

- `Business/SAIF.Business.View.Policy/clsPolicySecurity.vb`
- `Business/SAIF.Business.View.Policy/app.config`
- `Business/SAIF.Business.View.Policy/Web.config`
- `Business/SAIF.Business.View.Policy/packages.config`
- `Business/SAIF.Business.View.Policy/SAIF.BOF.Business.View.Policy.vbproj`
