2015-02-03 5 views
3

Как зашифровать вспомогательные документы, исключая определенные поля в поддонах?Шифрование Mongoose

Я пытаюсь реализовать шифрование по схеме ниже, используя mongoose-encryption plugin. Моя родительская схема, то есть «parentSchema» получает зашифрованную, но не дочернюю схему. Мне нужно зашифровать «childSchema» и «childinformationSchema». Что мне здесь не хватает?

var childinformationSchema = new Schema({ 
    otherwitnes: String, 
    reportedemployOther: String, 
    status: String, 
    updateddate: Date, 
    updatedby: String 
}); 

childinformationSchema.plugin(encrypt, { 
    key: encryptionKey, 
    exclude: ['status', 'updateddate', 'updatedby'] 
}); 

var childSchema = new Schema({ 
    childdata: { 
     childinformation: [childinformationSchema] 
    } 
}); 

childSchema.plugin(encrypt.encryptedChildren, { 
    key: encryptionKey 
}); 

var parentSchema = new Schema({ 
    practicename: String, 
    createddate: Date, 
    createdby: String, 
    updateddate: Date, 
    updatedby: String, 
    patientrecordno: String, 
    state: String, 
    child: [childSchema] 
}); 

parentSchema.plugin(
    encrypt.encryptedChildren, 
    { 
     key: encryptionKey, 
     exclude: ['createddate', 'createdby', 'updateddate', 'updatedby', 'state', 'patientrecordno', 'child'] 
    } 
); 
+0

Любое тело, кто может мне помочь? – Praveen

+2

Будьте терпеливы, кто-то с необходимыми знаниями в конечном итоге ответит. – joao

+0

@joao, возможно, начнет щедрость? :) –

ответ

1

В вашем случае использования имеются поддокументы поддокументов. Из некоторых тестов Mongoose, похоже, не поддерживает полную поддержку промежуточного программного обеспечения в субдокументах, и поэтому этот плагин не будет работать без какой-либо перестройки вашей схемы. Это может быть хорошей идеей вообще, потому что сам MongoDB doesn't have full support для вложенных вложенных массивов.

Будет ли он работать, если вы указали детей на одном из уровней вместо того, чтобы включать их непосредственно в качестве субдока? Например:

childinformationSchema.plugin(encrypt, { 
    encryptionKey: encryptionKey, 
    authenticationKey: authenticationKey, // latest version adds authentication 
    excludeFromEncryption: ['status', 'updateddate', 'updatedby'] 
}); 

var childSchema = new Schema({ 
    childinformation: [childinformationSchema] 
}); 

// because childSchema itself has encrypted children 
childSchema.plugin(encrypt.encryptedChildren); 

var parentSchema = new Schema({ 
    ... 
    child: [type: mongoose.Schema.Types.ObjectId, ref: 'Child'] 
}); 

parentSchema.plugin(encrypt, { 
    key: encryptionKey, 
    excludeFromEncryption: ['createddate', 'createdby', 'updateddate', 'updatedby', 'state', 'patientrecordno', 'child'] 
}); 

Кроме того, вы можете оставить childSchema вложенными непосредственно в parentSchema и включают в себя childinformationSchema по ссылке, а.

Подробнее об использовании поддокументы с мангустов-шифрования в the docs

Раскрытие: Я плагин автор

Смежные вопросы