(core) Fix for ACL page for temporary documents.

Summary:
When the ACL page was visited by an anonymous user (for a temporary doc), it
tried to load the "View as" list, which failed. Apart from example users, it was
also trying to load all users the document is shared with by checking the home db.
However, since the document is not persisted, it failed.

Test Plan: Added new test

Reviewers: Spoffy

Reviewed By: Spoffy

Subscribers: Spoffy

Differential Revision: https://phab.getgrist.com/D4257
pull/1004/head
Jarosław Sadziński 4 months ago
parent 15590950e6
commit 0262ad7a47

@ -79,7 +79,8 @@ import {schema, SCHEMA_VERSION} from 'app/common/schema';
import {MetaRowRecord, SingleCell} from 'app/common/TableData'; import {MetaRowRecord, SingleCell} from 'app/common/TableData';
import {TelemetryEvent, TelemetryMetadataByLevel} from 'app/common/Telemetry'; import {TelemetryEvent, TelemetryMetadataByLevel} from 'app/common/Telemetry';
import {FetchUrlOptions, UploadResult} from 'app/common/uploads'; import {FetchUrlOptions, UploadResult} from 'app/common/uploads';
import {Document as APIDocument, DocReplacementOptions, DocState, DocStateComparison} from 'app/common/UserAPI'; import {Document as APIDocument, DocReplacementOptions,
DocState, DocStateComparison, NEW_DOCUMENT_CODE} from 'app/common/UserAPI';
import {convertFromColumn} from 'app/common/ValueConverter'; import {convertFromColumn} from 'app/common/ValueConverter';
import {guessColInfo} from 'app/common/ValueGuesser'; import {guessColInfo} from 'app/common/ValueGuesser';
import {parseUserAction} from 'app/common/ValueParser'; import {parseUserAction} from 'app/common/ValueParser';
@ -1574,9 +1575,13 @@ export class ActiveDoc extends EventEmitter {
}; };
const isShared = new Set<string>(); const isShared = new Set<string>();
// Collect users the document is shared with.
const userId = getDocSessionUserId(docSession); const userId = getDocSessionUserId(docSession);
if (!userId) { throw new Error('Cannot determine user'); } if (!userId) { throw new Error('Cannot determine user'); }
const parsed = parseUrlId(this.docName);
// If this is not a temporary document (i.e. created by anonymous user).
if (parsed.trunkId !== NEW_DOCUMENT_CODE) {
// Collect users the document is shared with.
const db = this.getHomeDbManager(); const db = this.getHomeDbManager();
if (db) { if (db) {
const access = db.unwrapQueryResult( const access = db.unwrapQueryResult(
@ -1586,6 +1591,7 @@ export class ActiveDoc extends EventEmitter {
result.users = access.users; result.users = access.users;
result.users.forEach(user => isShared.add(normalizeEmail(user.email))); result.users.forEach(user => isShared.add(normalizeEmail(user.email)));
} }
}
// Collect users from user attribute tables. Omit duplicates with users the document is // Collect users from user attribute tables. Omit duplicates with users the document is
// shared with. // shared with.

Loading…
Cancel
Save