mirror of
https://github.com/gristlabs/grist-core.git
synced 2026-03-02 04:09:24 +00:00
(core) Allow the support user to access everyone's billing pages
Summary: Give specialPermit to the support user for page loads and API requests needed to serve billing pages. Test Plan: Added new test cases Reviewers: paulfitz Reviewed By: paulfitz Differential Revision: https://phab.getgrist.com/D2554
This commit is contained in:
@@ -37,7 +37,7 @@ import {getLoginMiddleware} from 'app/server/lib/logins';
|
||||
import {getAppPathTo, getAppRoot, getUnpackedAppRoot} from 'app/server/lib/places';
|
||||
import {addPluginEndpoints, limitToPlugins} from 'app/server/lib/PluginEndpoint';
|
||||
import {PluginManager} from 'app/server/lib/PluginManager';
|
||||
import {adaptServerUrl, optStringParam, RequestWithGristInfo, stringParam, TEST_HTTPS_OFFSET,
|
||||
import {adaptServerUrl, addPermit, getScope, optStringParam, RequestWithGristInfo, stringParam, TEST_HTTPS_OFFSET,
|
||||
trustOrigin} from 'app/server/lib/requestUtils';
|
||||
import {ISendAppPageOptions, makeSendAppPage} from 'app/server/lib/sendAppPage';
|
||||
import * as ServerMetrics from 'app/server/lib/ServerMetrics';
|
||||
@@ -897,7 +897,9 @@ export class FlexServer implements GristServer {
|
||||
if (!orgDomain) {
|
||||
return this._sendAppPage(req, resp, {path: 'error.html', status: 404, config: {errPage: 'not-found'}});
|
||||
}
|
||||
const query = await this.dbManager.getOrg({userId: mreq.userId!}, orgDomain);
|
||||
// Allow the support user access to billing pages.
|
||||
const scope = addPermit(getScope(mreq), this.dbManager.getSupportUserId(), {org: orgDomain});
|
||||
const query = await this.dbManager.getOrg(scope, orgDomain);
|
||||
const org = this.dbManager.unwrapQueryResult(query);
|
||||
// This page isn't availabe for personal site.
|
||||
if (org.owner) {
|
||||
|
||||
@@ -4,6 +4,7 @@ import {DocScope, QueryResult, Scope} from 'app/gen-server/lib/HomeDBManager';
|
||||
import {getUserId, RequestWithLogin} from 'app/server/lib/Authorizer';
|
||||
import {RequestWithOrg} from 'app/server/lib/extractOrg';
|
||||
import * as log from 'app/server/lib/log';
|
||||
import {Permit} from 'app/server/lib/Permit';
|
||||
import {Request, Response} from 'express';
|
||||
import {URL} from 'url';
|
||||
|
||||
@@ -132,6 +133,13 @@ export function getScope(req: Request): Scope {
|
||||
return {urlId, userId, org, includeSupport, showRemoved, specialPermit};
|
||||
}
|
||||
|
||||
/**
|
||||
* If scope is for the given userId, return a new Scope with the special permit added.
|
||||
*/
|
||||
export function addPermit(scope: Scope, userId: number, specialPermit: Permit): Scope {
|
||||
return {...scope, ...(scope.userId === userId ? {specialPermit} : {})};
|
||||
}
|
||||
|
||||
// Return a JSON response reflecting the output of a query.
|
||||
// Filter out keys we don't want crossing the api.
|
||||
// Set req to null to not log any information about request.
|
||||
|
||||
Reference in New Issue
Block a user