Permission Gates¶
FixtureForge classifies every model by data sensitivity and gates operations accordingly.
Three Levels¶
| Level | Examples | Behavior |
|---|---|---|
| SAFE | name, email, id |
Auto-approved |
| SENSITIVE | ssn, salary, passport_number |
Requires allow_pii=True or FORGE_ALLOW_PII=1 |
| DANGEROUS | SQL injection strings, XSS payloads | Requires interactive confirmation |
Usage¶
class SafeUser(BaseModel):
id: int
name: str # SAFE
class CustomerProfile(BaseModel):
id: int
ssn: str # SENSITIVE
salary: float # SENSITIVE
class SecurityTest(BaseModel):
id: int
sql_injection: str # DANGEROUS
xss_payload: str # DANGEROUS
# Enable PII generation
forge = Forge(allow_pii=True)
profiles = forge.create_batch(CustomerProfile, count=10)
# CI/headless — dangerous ops silently rejected
forge = Forge(interactive=False)
# Interactive — user prompted to confirm dangerous ops
forge = Forge(interactive=True)
Environment Variables¶
Mailbox Pattern¶
The permission system uses a thread-safe Mailbox Pattern with threading.Lock:
- Generation request submitted to mailbox
ForgeCoordinatoratomically claims the requestFieldPermissionCheckerclassifies all fields- Gate decision: auto-approve / env-check / prompt user
- Result returned or request rejected
This means permission checks are safe to use from multiple threads (e.g., inside DataSwarms).