gristlabs_grist-core/app
Paul Fitzpatrick 45d2d5f897 (core) back-end support for tables that are accessible only by owners
Summary:
This makes it possible to serve a table or tables only to owners.

 * The _grist_ACLResources table is abused (temporarily) such that rows of the form `{colId: '~o', tableId}` are interpreted as meaning that `tableId` is private to owners.
 * Many websocket and api endpoints are updated to preserve the privacy of these tables.
 * In a document where some tables are private, a lot of capabilities are turned off for non-owners to avoid leaking info indirectly.
 * The client is tweaked minimally, to show '-' where a page with some private material would otherwise go.

No attempt is made to protect data from private tables pulled into non-private tables via formulas.

There are some known leaks remaining:
 * Changes to the schema of private tables are still broadcast to all clients (fixable).
 * Non-owner may be able to access snapshots or make forks or use other corners of API (fixable).
 * Changing name of table makes it public, since tableId in ACLResource is not updated (fixable).

Security will require some work, the attack surface is large.

Test Plan: added tests

Reviewers: dsagal

Reviewed By: dsagal

Differential Revision: https://phab.getgrist.com/D2604
2020-09-14 18:05:27 -04:00
..
client (core) Show a welcome card when a user opens an example for the first time. 2020-09-09 23:08:50 -04:00
common (core) Show a welcome card when a user opens an example for the first time. 2020-09-09 23:08:50 -04:00
gen-server (core) Show a welcome card when a user opens an example for the first time. 2020-09-09 23:08:50 -04:00
plugin (core) Improve object serialization, to help get RECORD data to Custom Widgets. 2020-08-21 18:33:28 -04:00
server (core) back-end support for tables that are accessible only by owners 2020-09-14 18:05:27 -04:00
tsconfig.json (core) move home server into core 2020-07-21 20:39:10 -04:00