(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,17 +1575,22 @@ 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 db = this.getHomeDbManager();
if (db) { const parsed = parseUrlId(this.docName);
const access = db.unwrapQueryResult( // If this is not a temporary document (i.e. created by anonymous user).
await db.getDocAccess({userId, urlId: this.docName}, { if (parsed.trunkId !== NEW_DOCUMENT_CODE) {
flatten: true, excludeUsersWithoutAccess: true, // Collect users the document is shared with.
})); const db = this.getHomeDbManager();
result.users = access.users; if (db) {
result.users.forEach(user => isShared.add(normalizeEmail(user.email))); const access = db.unwrapQueryResult(
await db.getDocAccess({userId, urlId: this.docName}, {
flatten: true, excludeUsersWithoutAccess: true,
}));
result.users = access.users;
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

Loading…
Cancel
Save