# ACCESS / GOVERNANCE Templates Each template is a verified shape from a passing test fixture. Copy, then change names/values. --- ## ACCESS — Simple Permit (no conditions) Source: `baseSteelthread` ```xml Read ACCESS_POLICY_RULE_DEFINITION Permit Set1 INTERNAL ANY ANY DATACLOUD 0 ``` --- ## ACCESS / GOVERNANCE — "Objects AND all their fields" via TupleRead (UI-compatible) Source: see §8.2.1 of policy.md Three required pieces: 1. `TupleRead` — cascades object-level condition to fields 2. **OR-of-ENTITYTYPE clause** — required for UI editability (without it the builder crashes) 3. The actual semantic gate (tag / classification / permission) ```xml TupleRead GOVERNANCE_POLICY_RULE_DEFINITION Permit PublicAccessSet INTERNAL ANY ANY DATACLOUD 0 WHEN IS {"t":"Text","v":"OBJECT"} ENTITYTYPE WHEN IS {"t":"Text","v":"FIELD"} ENTITYTYPE WHEN CONTAINS_ANY TAG DataGovernanceTags.ExternalData.Visibility.Public STANDARD_TAG (AND (OR 1 2) (AND 3)) ``` For **deny semantics**: `Forbid`. To add "deny unless permission Y", insert a 4th condition with `ASSIGNED_PERMISSIONS_PATH CONTAINS_NONE Y` and use `(AND (OR 1 2) (AND 3) (AND 4))`. --- ## ACCESS — Gated by Tag / Classification / Permission Source: `conditionTagValidSteelthread`, `conditionClassificationValidClauseSteelthread`, `conditionAssignedPermPathValidSteelthread` ```xml Read ACCESS_POLICY_RULE_DEFINITION Permit TagSet1 INTERNAL ANY ANY DATACLOUD 0 WHEN CONTAINS_ANY TAG CustomTagRef CUSTOM_TAG 1 ``` Swap the inner condition for permission gating: ```xml WHEN CONTAINS_ANY ASSIGNED_PERMISSIONS_PATH testCustomPermission1 CUSTOM_PERMISSION ```