superadmin - Create users and upload files for all entities
admin - Create users and upload files for linked entities
data_entry - Upload files for linked entities
viewer - View data for linked entities
Multi‑Entity (Summary)
traceability.user_entities adds is_primary, is_provisional, mpob_id; entity_id can be NULL for provisional. One primary per user (partial unique index).
Profile returns all active links; sidebar Entity Switcher lists links with real entity_id. Superadmin also sees all FFB DEALER, MILL, CRUSHER.
Active entity is sent to APIs via x-entity-id; uploads are scoped by (buyer_entity_id, product_type, transaction_period).
Provisional links (by mpob_id) auto‑promote to normal when a matching entity appears (DB trigger).
Roles: superadmin = all entity types; admin/data_entry = upload for linked entities; viewer = read‑only.