Skip to content

Commit 0746f02

Browse files
committed
Use master key state property on editRowDialog and ObjectPickerDialog;
Enabled using useMasteKey property for save actions and other actions
1 parent cba1de4 commit 0746f02

File tree

4 files changed

+55
-36
lines changed

4 files changed

+55
-36
lines changed

src/dashboard/Data/Browser/Browser.react.js

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ class Browser extends DashboardView {
166166
let relation = this.state.relation;
167167
if (isRelationRoute && !relation) {
168168
const parentObjectQuery = new Parse.Query(className);
169-
const parent = await parentObjectQuery.get(entityId, { useMasterKey: true });
169+
const { useMasterKey } = this.state;
170+
const parent = await parentObjectQuery.get(entityId, { useMasterKey: useMasterKey });
170171
relation = parent.relation(relationName);
171172
}
172173
await this.setState({
@@ -401,7 +402,8 @@ class Browser extends DashboardView {
401402

402403
async fetchParseDataCount(source, filters) {
403404
const query = queryFromFilters(source, filters);
404-
const count = await query.count({ useMasterKey: true });
405+
const { useMasterKey } = this.state;
406+
const count = await query.count({ useMasterKey: useMasterKey });
405407
return count;
406408
}
407409

@@ -478,7 +480,8 @@ class Browser extends DashboardView {
478480
}
479481
query.limit(MAX_ROWS_FETCHED);
480482

481-
query.find({ useMasterKey: true }).then((nextPage) => {
483+
const { useMasterKey } = this.state;
484+
query.find({ useMasterKey: useMasterKey }).then((nextPage) => {
482485
if (className === this.props.params.className) {
483486
this.setState((state) => ({
484487
data: state.data.concat(nextPage)
@@ -569,7 +572,8 @@ class Browser extends DashboardView {
569572
} else {
570573
obj.set(attr, value);
571574
}
572-
obj.save(null, { useMasterKey: true }).then((objectSaved) => {
575+
const { useMasterKey } = this.state;
576+
obj.save(null, { useMasterKey: useMasterKey }).then((objectSaved) => {
573577
const createdOrUpdated = isNewObject ? 'created' : 'updated';
574578
let msg = objectSaved.className + ' with id \'' + objectSaved.id + '\' ' + createdOrUpdated;
575579
this.showNote(msg, false);
@@ -583,7 +587,7 @@ class Browser extends DashboardView {
583587
const parentRelation = parent.relation(relation.key);
584588
parentRelation.add(obj);
585589
const targetClassName = relation.targetClassName;
586-
parent.save(null, { useMasterKey: true }).then(() => {
590+
parent.save(null, { useMasterKey: useMasterKey }).then(() => {
587591
this.setState({
588592
newObject: null,
589593
data: [
@@ -660,10 +664,11 @@ class Browser extends DashboardView {
660664
const toDeleteObjectIds = [];
661665
toDelete.forEach((obj) => { toDeleteObjectIds.push(obj.id); });
662666

667+
const { useMasterKey } = this.state;
663668
let relation = this.state.relation;
664669
if (relation && toDelete.length) {
665670
relation.remove(toDelete);
666-
relation.parent.save(null, { useMasterKey: true }).then(() => {
671+
relation.parent.save(null, { useMasterKey: useMasterKey }).then(() => {
667672
if (this.state.relation === relation) {
668673
for (let i = 0; i < indexes.length; i++) {
669674
this.state.data.splice(indexes[i] - i, 1);
@@ -674,7 +679,7 @@ class Browser extends DashboardView {
674679
}
675680
});
676681
} else if (toDelete.length) {
677-
Parse.Object.destroyAll(toDelete, { useMasterKey: true }).then(() => {
682+
Parse.Object.destroyAll(toDelete, { useMasterKey: useMasterKey }).then(() => {
678683
let deletedNote;
679684

680685
if (toDeleteObjectIds.length == 1) {
@@ -767,11 +772,12 @@ class Browser extends DashboardView {
767772
if (!objectIds || !objectIds.length) {
768773
throw 'No objectId passed';
769774
}
775+
const { useMasterKey } = this.state;
770776
const relation = this.state.relation;
771777
const query = new Parse.Query(relation.targetClassName);
772778
const parent = relation.parent;
773779
query.containedIn('objectId', objectIds);
774-
let objects = await query.find({ useMasterKey: true });
780+
let objects = await query.find({ useMasterKey: useMasterKey });
775781
const missedObjectsCount = objectIds.length - objects.length;
776782
if (missedObjectsCount) {
777783
const missedObjects = [];
@@ -785,7 +791,7 @@ class Browser extends DashboardView {
785791
throw `${errorSummary} ${JSON.stringify(missedObjects)}`;
786792
}
787793
parent.relation(relation.key).add(objects);
788-
await parent.save(null, { useMasterKey: true });
794+
await parent.save(null, { useMasterKey: useMasterKey });
789795
// remove duplication
790796
this.state.data.forEach(origin => objects = objects.filter(object => object.id !== origin.id));
791797
this.setState({
@@ -811,13 +817,14 @@ class Browser extends DashboardView {
811817
}
812818

813819
async confirmAttachSelectedRows(className, targetObjectId, relationName, objectIds, targetClassName) {
820+
const { useMasterKey } = this.state;
814821
const parentQuery = new Parse.Query(className);
815-
const parent = await parentQuery.get(targetObjectId, { useMasterKey: true });
822+
const parent = await parentQuery.get(targetObjectId, { useMasterKey: useMasterKey });
816823
const query = new Parse.Query(targetClassName || this.props.params.className);
817824
query.containedIn('objectId', objectIds);
818-
const objects = await query.find({ useMasterKey: true });
825+
const objects = await query.find({ useMasterKey: useMasterKey });
819826
parent.relation(relationName).add(objects);
820-
await parent.save(null, { useMasterKey: true });
827+
await parent.save(null, { useMasterKey: useMasterKey });
821828
this.setState({
822829
selection: {},
823830
});
@@ -836,18 +843,19 @@ class Browser extends DashboardView {
836843
}
837844

838845
async confirmCloneSelectedRows() {
846+
const { useMasterKey } = this.state;
839847
const objectIds = [];
840848
for (const objectId in this.state.selection) {
841849
objectIds.push(objectId);
842850
}
843851
const query = new Parse.Query(this.props.params.className);
844852
query.containedIn('objectId', objectIds);
845-
const objects = await query.find({ useMasterKey: true });
853+
const objects = await query.find({ useMasterKey: useMasterKey });
846854
const toClone = [];
847855
for (const object of objects) {
848856
toClone.push(object.clone());
849857
}
850-
await Parse.Object.saveAll(toClone, { useMasterKey: true });
858+
await Parse.Object.saveAll(toClone, { useMasterKey: useMasterKey });
851859
this.setState({
852860
selection: {},
853861
data: [
@@ -1205,6 +1213,7 @@ class Browser extends DashboardView {
12051213
updateRow={this.updateRow}
12061214
confirmAttachSelectedRows={this.confirmAttachSelectedRows}
12071215
schema={this.props.schema}
1216+
useMasterKey={this.state.useMasterKey}
12081217
/>
12091218
)
12101219
}

src/dashboard/Data/Browser/BrowserToolbar.react.js

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -225,23 +225,27 @@ let BrowserToolbar = ({
225225
className={classNameForEditors}
226226
blacklistedFilters={onAddRow ? [] : ['unique']}
227227
/>
228-
<div className={styles.toolbarSeparator} />
229-
<LoginDialog
230-
ref={loginDialogRef}
231-
currentUser={currentUser}
232-
login={login}
233-
logout={logout}
234-
/>
235-
<BrowserMenu
236-
setCurrent={setCurrent}
237-
title={currentUser ? 'Browsing' : 'Browse'}
238-
icon="users-solid"
239-
active={!!currentUser}
240-
>
241-
<MenuItem text={currentUser ? 'Switch User' : 'As User'} onClick={showLogin} />
242-
{currentUser ? <MenuItem text={<span>Use Master Key <Toggle type={Toggle.Types.HIDE_LABELS} value={useMasterKey} onChange={toggleMasterKeyUsage} switchNoMargin={true} additionalStyles={{ display: 'inline', lineHeight: 0, margin: 0, paddingLeft: 5 }} /></span>} onClick={toggleMasterKeyUsage} /> : <noscript />}
243-
{currentUser ? <MenuItem text={<span>Stop browsing (<b>{currentUser.get('username')}</b>)</span>} onClick={logout} /> : <noscript />}
228+
{onAddRow && <div className={styles.toolbarSeparator} />}
229+
{onAddRow && (
230+
<LoginDialog
231+
ref={loginDialogRef}
232+
currentUser={currentUser}
233+
login={login}
234+
logout={logout}
235+
/>
236+
)}
237+
{onAddRow && (
238+
<BrowserMenu
239+
setCurrent={setCurrent}
240+
title={currentUser ? 'Browsing' : 'Browse'}
241+
icon="users-solid"
242+
active={!!currentUser}
243+
>
244+
<MenuItem text={currentUser ? 'Switch User' : 'As User'} onClick={showLogin} />
245+
{currentUser ? <MenuItem text={<span>Use Master Key <Toggle type={Toggle.Types.HIDE_LABELS} value={useMasterKey} onChange={toggleMasterKeyUsage} switchNoMargin={true} additionalStyles={{ display: 'inline', lineHeight: 0, margin: 0, paddingLeft: 5 }} /></span>} onClick={toggleMasterKeyUsage} /> : <noscript />}
246+
{currentUser ? <MenuItem text={<span>Stop browsing (<b>{currentUser.get('username')}</b>)</span>} onClick={logout} /> : <noscript />}
244247
</BrowserMenu>
248+
)}
245249
{onAddRow && <div className={styles.toolbarSeparator} />}
246250
{perms && enableSecurityDialog ? (
247251
<SecurityDialog

src/dashboard/Data/Browser/EditRowDialog.react.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,12 +128,13 @@ export default class EditRowDialog extends React.Component {
128128
selectedObject,
129129
className,
130130
updateRow,
131-
confirmAttachSelectedRows
131+
confirmAttachSelectedRows,
132+
useMasterKey
132133
} = this.props;
133134
if (type === 'Relation') {
134135
if (toDelete.length > 0) {
135136
selectedObject[name].remove(toDelete);
136-
selectedObject[name].parent.save(null, { useMasterKey: true });
137+
selectedObject[name].parent.save(null, { useMasterKey: useMasterKey });
137138
}
138139
if (newValue.length > 0) {
139140
confirmAttachSelectedRows(
@@ -217,7 +218,7 @@ export default class EditRowDialog extends React.Component {
217218
}
218219

219220
render() {
220-
const { selectedObject, className, columns, onClose, schema } = this.props;
221+
const { selectedObject, className, columns, onClose, schema, useMasterKey } = this.props;
221222
const { currentObject, openObjectPickers, expandedTextAreas } = this.state;
222223

223224
const fields = columns.map(column => {
@@ -349,6 +350,7 @@ export default class EditRowDialog extends React.Component {
349350
this.handleChange(newValue, name, type, targetClass)
350351
}
351352
onCancel={() => this.toggleObjectPicker(name, false)}
353+
useMasterKey={useMasterKey}
352354
/>
353355
) : (
354356
<div
@@ -387,6 +389,7 @@ export default class EditRowDialog extends React.Component {
387389
this.handleChange(newValue, name, type, targetClass, toDelete)
388390
}
389391
onCancel={() => this.toggleObjectPicker(name, false)}
392+
useMasterKey={useMasterKey}
390393
/>
391394
) : (
392395
selectedObject.id && (

src/dashboard/Data/Browser/ObjectPickerDialog.react.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ export default class ObjectPickerDialog extends React.Component {
9898
}
9999

100100
async fetchParseData(source, filters) {
101+
const { useMasterKey } = this.props;
101102
const query = queryFromFilters(source, filters);
102103
const sortDir = this.state.ordering[0] === '-' ? '-' : '+';
103104
const field = this.state.ordering.substr(sortDir === '-' ? 1 : 0);
@@ -110,15 +111,16 @@ export default class ObjectPickerDialog extends React.Component {
110111

111112
query.limit(MAX_ROWS_FETCHED);
112113

113-
let promise = query.find({ useMasterKey: true });
114+
let promise = query.find({ useMasterKey: useMasterKey });
114115

115116
const data = await promise;
116117
return data;
117118
}
118119

119120
async fetchParseDataCount(source, filters) {
120121
const query = queryFromFilters(source, filters);
121-
const count = await query.count({ useMasterKey: true });
122+
const { useMasterKey } = this.props;
123+
const count = await query.count({ useMasterKey: useMasterKey });
122124
return count;
123125
}
124126

@@ -172,7 +174,8 @@ export default class ObjectPickerDialog extends React.Component {
172174
}
173175
query.limit(MAX_ROWS_FETCHED);
174176

175-
query.find({ useMasterKey: true }).then(nextPage => {
177+
const { useMasterKey } = this.props;
178+
query.find({ useMasterKey: useMasterKey }).then(nextPage => {
176179
if (className === this.props.className) {
177180
this.setState(state => ({
178181
data: state.data.concat(nextPage)

0 commit comments

Comments
 (0)