Skip to content

Feature policy configuration

AppSettings.manager.feature_policies and AppSettings.portal.feature_policies store typed disabled, targeted and default_on policies. These replace the feature-specific General/Portal booleans; workspace switches and creation defaults keep their existing contracts. resolve_feature_policy resolves only configuration, never storage authorization. Existing access, capability and execution services remain authoritative and use the same resolution for catalogues and operations.

Account/RGW User override columns are nullable booleans. Missing update fields are unchanged, explicit null restores inheritance, and booleans are explicit choices. Portal retains its single Account JSON override and delegation model. New activations under a platform prohibition are rejected; unchanged historical activations can be retained while their effective value stays disabled.

EffectiveAccessService adds platform Tool/provisioning grants for eligible UI roles in default_on mode. Direct and Group grants still add together. A false direct field is not a denial. Effective access auditing includes platform alongside direct and group sources.

The authenticated /settings/general API exposes the canonical project policies plus manager_feature_policies; it does not duplicate them as derived availability booleans and it is not the persisted General configuration. Manager context and Portal settings expose effective values, source and refusal metadata for the selected resource.

Migration 0148_feature_policies converts only the default AppSetting row, preserves all existing resource booleans and removes their defaults for future rows. Manager true/false settings become targeted/disabled; Portal true/false defaults become default_on/targeted. Migration 0151_project_usage_feature_overrides separately converts the former bucket_usage_stats_enabled and manager_rgw_usage_metrics_enabled fields into their canonical project/Manager policy fields. APP_SETTINGS_PATH is only an initial bootstrap source and must already use the current schema; removed settings fields are rejected there just like they are on normal database reads. Backend and bundled frontend must be upgraded together.

An older version cannot express inheritance or Portal prohibitions. Downgrade conservatively converts inherited resource values to explicit false and loses policy semantics. For a faithful rollback, restore the pre-upgrade database backup rather than relying on schema downgrade to preserve behavior.

The configuration editor reuses compact settings tokens. Help tooltips use a shared primitive extracted from dashboard information, preserving its hover, focus, pin, dismissal and viewport-positioning behavior. Essential applied values, errors and blockers remain outside tooltips.