Skip to content

Commit 0590d8a

Browse files
authored
Merge pull request #4408 from apostrophecms/pro-5489-delete-per-doc-perms
removes related reverse IDs when deleting a draft document
2 parents e5b1457 + 16b1add commit 0590d8a

File tree

4 files changed

+328
-135
lines changed

4 files changed

+328
-135
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
### Fixes
66

7+
* When deleting a draft document, we remove related reverse IDs of documents having a relation to the deleted one.
78
* Fix publishing or moving published page after a draft page on the same tree level to work as expected.
89

910
## 3.62.0 (2024-01-25)

modules/@apostrophecms/doc-type/index.js

+25-7
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,15 @@ module.exports = {
328328
}
329329
}
330330
},
331+
afterDelete: {
332+
async deleteRelatedReverseId(req, doc) {
333+
// When deleting an unlocalized or draft document,
334+
// we remove related reverse IDs of documents having a relation to the deleted one
335+
if (!doc.aposMode || doc.aposMode === 'draft') {
336+
await self.deleteRelatedReverseId(doc, true);
337+
}
338+
}
339+
},
331340
afterRescue: {
332341
async revertDeduplication(req, doc) {
333342
const $set = await self.getRevertDeduplicationSet(req, doc);
@@ -371,18 +380,27 @@ module.exports = {
371380

372381
methods(self) {
373382
return {
374-
async updateCacheField(req, doc) {
375-
const relatedDocsIds = self.getRelatedDocsIds(req, doc);
376-
377-
// - Remove current doc reference from docs that include it
378-
// - Update these docs' cache field
379-
await self.apos.doc.db.updateMany({
383+
async deleteRelatedReverseId(doc, deleting = false) {
384+
const locales = doc.aposLocale && deleting
385+
? [
386+
doc.aposLocale.replace(':draft', ':published'),
387+
doc.aposLocale.replace(':published', ':draft')
388+
]
389+
: [ doc.aposLocale ];
390+
return self.apos.doc.db.updateMany({
380391
relatedReverseIds: { $in: [ doc.aposDocId ] },
381-
aposLocale: { $in: [ doc.aposLocale, null ] }
392+
aposLocale: { $in: [ ...locales, null ] }
382393
}, {
383394
$pull: { relatedReverseIds: doc.aposDocId },
384395
$set: { cacheInvalidatedAt: doc.updatedAt }
385396
});
397+
},
398+
async updateCacheField(req, doc) {
399+
const relatedDocsIds = self.getRelatedDocsIds(req, doc);
400+
401+
// - Remove current doc reference from docs that include it
402+
// - Update these docs' cache field
403+
await this.deleteRelatedReverseId(doc);
386404

387405
if (relatedDocsIds.length) {
388406
// - Add current doc reference to related docs

modules/@apostrophecms/doc/index.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -717,7 +717,6 @@ module.exports = {
717717
// This operation ignores the locale and mode of `req`
718718
// in favor of the actual document's locale and mode.
719719
async delete(req, doc, options = {}) {
720-
options = options || {};
721720
const m = self.getManager(doc.type);
722721
await m.emit('beforeDelete', req, doc, options);
723722
await self.deleteBody(req, doc, options);
@@ -1062,12 +1061,12 @@ module.exports = {
10621061
_id: tabId,
10631062
updatedAt: new Date()
10641063
};
1065-
const result = await self.db.updateOne(criteria, {
1064+
const { result } = await self.db.updateOne(criteria, {
10661065
$set: {
10671066
advisoryLock: doc.advisoryLock
10681067
}
10691068
});
1070-
if (!result.result.nModified) {
1069+
if (!result.nModified) {
10711070
const info = await self.db.findOne({
10721071
_id
10731072
}, {

0 commit comments

Comments
 (0)