Ver Fonte

Added migration file

Taichi Masuyama há 4 anos atrás
pai
commit
9ceb923c9c

+ 87 - 0
packages/app/src/migrations/20220311011114-convert-page-delete-config.js

@@ -0,0 +1,87 @@
+import mongoose from 'mongoose';
+import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
+
+import ConfigModel from '~/server/models/config';
+import { PageDeleteConfigValue } from '~/interfaces/page-delete-config';
+
+import loggerFactory from '~/utils/logger';
+
+const logger = loggerFactory('growi:migrate:convert-page-delete-config');
+
+
+module.exports = {
+  async up(db, client) {
+    mongoose.connect(getMongoUri(), mongoOptions);
+    const Config = getModelSafely('Config') || ConfigModel;
+
+    const oldConfig = await Config.findOne({
+      ns: 'crowi',
+      key: 'security:pageCompleteDeletionAuthority',
+    });
+
+    const oldValue = oldConfig?.value || '"anyOne"';
+    const newValue = oldValue === '"anyOne"' ? `"${PageDeleteConfigValue.Anyone}"` : oldConfig.value;
+
+    try {
+      await Config.updateOne(
+        {
+          ns: 'crowi',
+          key: 'security:pageCompleteDeletionAuthority',
+        },
+        { value: newValue },
+      );
+
+      await Config.insertMany(
+        [
+          {
+            ns: 'crowi',
+            key: 'security:pageDeletionAuthority',
+            value: newValue,
+          },
+          {
+            ns: 'crowi',
+            key: 'security:pageRecursiveDeletionAuthority',
+            value: `"${PageDeleteConfigValue.Inherit}"`,
+          },
+          {
+            ns: 'crowi',
+            key: 'security:pageRecursiveCompleteDeletionAuthority',
+            value: `"${PageDeleteConfigValue.Inherit}"`,
+          },
+        ],
+      );
+    }
+    catch (err) {
+      logger.error('Failed to migrate page delete configs', err);
+      throw err;
+    }
+
+    logger.info('Migration has successfully applied');
+  },
+
+  async down(db, client) {
+    mongoose.connect(getMongoUri(), mongoOptions);
+    const Config = getModelSafely('Config') || ConfigModel;
+
+    await Config.deleteMany({
+      ns: 'crowi',
+      key: { $in: ['security:pageDeletionAuthority', 'security:pageRecursiveDeletionAuthority', 'security:pageRecursiveCompleteDeletionAuthority'] },
+    });
+
+    const beforeVersionConfig = await Config.findOne({
+      ns: 'crowi',
+      key: 'security:pageCompleteDeletionAuthority',
+    });
+
+    if (beforeVersionConfig?.value === `"${PageDeleteConfigValue.Anyone}"`) {
+      await Config.updateOne({
+        ns: 'crowi',
+        key: 'security:pageCompleteDeletionAuthority',
+      }, {
+        value: '"anyOne"', // 'anyone' to 'anyOne'
+      });
+    }
+
+    logger.info('Migration down has successfully applied');
+  },
+};

+ 6 - 4
packages/app/src/server/models/config.ts

@@ -3,6 +3,8 @@ import uniqueValidator from 'mongoose-unique-validator';
 
 import { getOrCreateModel } from '@growi/core';
 
+import { PageDeleteConfigValue } from '~/interfaces/page-delete-config';
+
 export interface Config {
   _id: Types.ObjectId;
   ns: string;
@@ -60,10 +62,10 @@ export const defaultCrowiConfigs: { [key: string]: any } = {
   'security:list-policy:hideRestrictedByOwner' : false,
   'security:list-policy:hideRestrictedByGroup' : false,
   // DEPRECATED: 'security:pageCompleteDeletionAuthority' : undefined,
-  'security:pageDeletionAuthority' : undefined,
-  'security:pageCompleteDeletionAuthority' : undefined,
-  'security:pageRecursiveDeletionAuthority' : undefined,
-  'security:pageRecursiveCompleteDeletionAuthority' : undefined,
+  'security:pageDeletionAuthority' : PageDeleteConfigValue.Anyone,
+  'security:pageCompleteDeletionAuthority' : PageDeleteConfigValue.Anyone,
+  'security:pageRecursiveDeletionAuthority' : PageDeleteConfigValue.Inherit,
+  'security:pageRecursiveCompleteDeletionAuthority' : PageDeleteConfigValue.Inherit,
   'security:disableLinkSharing' : false,
 
   'security:passport-local:isEnabled' : true,