1. Scope forms to the tenant
Store forms under the tenant the same way you store other Filament resources (global scopes,team_id, Filament tenancy relationship, etc.). Studio list/edit already go through your panel auth — make sure FlexForm queries cannot cross tenants.
2. Lock uploads & signed file URLs
Withoutuploads.authorize, any authenticated panel user can upload/view files for any form. For SaaS hosts, fail closed:
config/filament-flex-forms.php
FLEX_FORMS_REQUIRE_AUTHORIZE=true. Details: Upload disks · Config & env.
3. Gate Studio actions
Use Spatie / Shield permission names, or:4. Scope Integration Connections
Connections store encrypted credentials. Scope them the same way you scope forms:created_by is set automatically from the authenticated panel user when a Connection is created.
5. Require encrypted answers (optional hard policy)
For forms that collect sensitive data, enable Encrypt submission answers per form (Form Settings → General). For organization-wide compliance, turn on Require encryption on all forms under Global Settings → Security, or set:Crypt / APP_KEY) — including both answer rows and the submission payload JSON. Studio, exports, and emails decrypt for display. See General Settings and Privacy.
Checklist before production
- Tenant-scoped
FlexFormqueries / policies - Tenant-scoped Integration Connections (
modifyConnectionsEloquentQueryUsing) -
uploads.authorize+require_authorize_callback - Studio ability grants for multi-admin teams
- Encryption policy decided (per form vs global / env)