Przeglądaj źródła

多租户需要修改框架的地方,写在readme里了

lrf402788946 4 lat temu
rodzic
commit
2728da6f26
1 zmienionych plików z 51 dodań i 1 usunięć
  1. 51 1
      README.md

+ 51 - 1
README.md

@@ -2,6 +2,56 @@
 
 
 权限角色
 权限角色
 
 
+因为使用框架的多租户模式有bug,但是框架又没改,所以需要手动在服务器把 naf-framework-mongoose>lib>plugin>egg-multi-tenancy>app>extend>application中
+loadModel2改为下面代码
+> const loadModel2 = (app, tenant) => {
+  app.logger.info(`[multi-tenancy] Load tenant models for ${tenant}`);
+  const model = {};
+  _.forEach(app.model, (val, key) => {
+    val = getModel(val, key)
+    if(!val||val.length<=0){
+       app.logger.debug(`[multi-tenancy] catalog have error! model not found`)
+       return;
+    }
+    for (const obj of val) {
+      _.forIn(obj,(v,k)=>{
+        const modelName = `${v.modelName}@${tenant}`;
+        const collName = `${v.collection.name}`;
+        const multiTenancy = v.schema.get('multi-tenancy');
+        if (multiTenancy) {
+          app.logger.debug(`[multi-tenancy] ${modelName} loaded`);
+          const schema = v.schema.clone();
+          schema.set('x-tenant', tenant);
+          schema.plugin(multiTenancyPlugin, app.config.multiTenancy);
+          model[k] = v.db.model(modelName, schema, collName);
+        } else {
+          app.logger.debug(`[multi-tenancy] skip ${v.modelName}, schema not enable multi-tenancy.`);
+          model[k] = v;
+        }
+      })
+    }
+  });
+  return model;
+};
+
+并添加
+> const getModel = (object, key) => {
+  let res = [];
+  if(!_.isFunction(object)) {
+    // 如果不是function,说明这是子目录,需要将object中每个key作为自己的新key,否则会导致model丢失
+      _.forIn(object, (v,k)=>{
+        res = [...res,...getModel(v,k)]
+      })
+  } else {
+    // 根目录,直接搞
+    const obj = {};
+    obj[key] = object;
+    res.push(obj);
+  };
+  return res;
+}
+
+
 ## QuickStart
 ## QuickStart
 
 
 <!-- add docs here for user -->
 <!-- add docs here for user -->
@@ -30,4 +80,4 @@ $ npm stop
 - Use `npm run autod` to auto detect dependencies upgrade, see [autod](https://www.npmjs.com/package/autod) for more detail.
 - Use `npm run autod` to auto detect dependencies upgrade, see [autod](https://www.npmjs.com/package/autod) for more detail.
 
 
 
 
-[egg]: https://eggjs.org
+[egg]: https://eggjs.org