Artful

Security

One gallery's records, and nobody else's.

What keeps a gallery's collectors, prices and documents apart from everyone else's, and what to do if you find a way around it.

Separation

Enforced by the database

  1. 01Every gallery's records live behind row-level security in the database itself. A request that names another gallery's record is refused by Postgres, not filtered by the app, and a suite of persona tests tries to cross that line on every change.
  2. 02Who can see a price is a database permission. A member without it is refused the price columns by the database, so no screen, export or answer from the assistant can show one.
  3. 03Restricted contacts stay restricted in search, exports, the assistant and every email the system writes.
  4. 04Identity documents are visible to owners and admins only, and every time one is opened the read is logged with who and when.

The record

Every change, and who made it

  1. 01Every change is recorded with who made it (a person, Artful, or the system), what it was before, and how to undo it.
  2. 02Sensitive writes (money, provenance, anything sent outside the gallery) wait for a person to approve them. The assistant cannot approve its own suggestion.
  3. 03Keys for connected services are encrypted at rest and never shown back in full.
  4. 04A second sign-in step (passkey or authenticator app) is available to everyone, and an owner can require it.

Reporting

Found a vulnerability?

Write to support@artful.site with what you found and how to reproduce it. You will hear back within two working days.

Please do not access or change data that is not yours while testing, and give us a reasonable time to fix a problem before you publish it. If a report involves a gallery's data, that gallery is told what happened and what was done.