Title (EN): --nedbtodb migration silently zeroes user rights (all users lose admin permissions)
Título (PT): Migração --nedbtodb zera silenciosamente o campo rights dos usuários (todos perdem permissões de admin)
Summary / Resumo
EN: When running node meshcentral.js --nedbtodb to migrate from NeDB to MongoDB, the rights field of every user document is not carried over — it ends up as 0 (or missing) in the MongoDB target. The result is that all users lose every permission, including the server administrator (0xFFFFFFFF expected). There is no error, no warning, and the server starts normally — but no user can administer anything, and the File Management / server-side file access (bit 0x200) is silently disabled for everyone.
PT: Ao executar node meshcentral.js --nedbtodb para migrar de NeDB para MongoDB, o campo rights de todos os documentos de usuário não é preservado — ele termina como 0 (ou ausente) no destino MongoDB. O resultado é que todos os usuários perdem todas as permissões, inclusive o administrador do servidor (que deveria ser 0xFFFFFFFF). Não há erro nem aviso: o servidor sobe normalmente, mas nenhum usuário consegue administrar nada, e o File Management / acesso a arquivos no servidor (bit 0x200) fica desativado silenciosamente para todos.
Steps to reproduce / Passos para reproduzir
EN:
- Have a working MeshCentral running on NeDB with at least one admin user whose
rights = 4294967295 (0xFFFFFFFF).
- Stop the server, set
settings.mongodb in config.json to a MongoDB connection string.
- Run
node meshcentral.js --nedbtodb.
- Start MeshCentral normally (
node meshcentral.js).
- Inspect the migrated user documents in MongoDB:
db.meshcentral.find({ type: "user" }, { email: 1, rights: 1 })
- Observed: every user has
rights: 0 (or the field is absent).
- Log in as the former admin → no administrative UI, File Management tab unavailable.
PT:
- Ter um MeshCentral funcionando em NeDB com pelo menos um usuário admin cujo
rights = 4294967295 (0xFFFFFFFF).
- Parar o servidor, definir
settings.mongodb no config.json apontando para um MongoDB.
- Executar
node meshcentral.js --nedbtodb.
- Iniciar o MeshCentral normalmente (
node meshcentral.js).
- Inspecionar os documentos de usuário migrados no MongoDB:
db.meshcentral.find({ type: "user" }, { email: 1, rights: 1 })
- Observado: todos os usuários têm
rights: 0 (ou o campo está ausente).
- Logar como o ex-admin → sem UI administrativa, aba de File Management indisponível.
Root cause / Causa raiz
EN: The NeDB→Mongo migration path (--nedbtodb, in db.js) copies the meshcentral collection documents but does not preserve the rights integer. Either the field is dropped during the document transform, or the Mongo users schema/insert defaults it to 0. Because NeDB stored rights as a top-level number and the Mongo path re-serializes the record, the value is lost. The migration logs "Done. N record(s)" but never validates that permission bits survived.
PT: O caminho de migração NeDB→Mongo (--nedbtodb, em db.js) copia os documentos da collection meshcentral, mas não preserva o inteiro rights. Ou o campo é descartado durante a transformação do documento, ou o schema/insert Mongo do usuário o define como 0 por padrão. Como o NeDB armazenava rights como número de nível superior e o caminho Mongo re-serializa o registro, o valor é perdido. A migração registra "Done. N record(s)", mas nunca valida se os bits de permissão sobreviveram.
Impact / Impacto
EN: Data corruption / silent privilege loss. Any operator migrating to MongoDB (the recommended path on Node 22/24, where NeDB is deprecated) ends up with a server where nobody can administer anything. High severity because it is silent and affects 100% of migrated users.
PT: Corrupção de dados / perda silenciosa de privilégios. Qualquer operador que migra para MongoDB (o caminho recomendado no Node 22/24, onde NeDB está obsoleto) acaba com um servidor onde ninguém consegue administrar nada. Severidade alta porque é silencioso e afeta 100% dos usuários migrados.
Suggested fix / Correção sugerida
EN: In the --nedbtodb migration, explicitly copy rights (and any other permission/flag fields) from the source NeDB record to the Mongo insert, and add a post-migration assertion that every type:"user" document has rights > 0. Example:
// during record transform
const rights = (src.rights !== undefined && src.rights !== null) ? src.rights : 4294967295;
mongoDoc.rights = rights;
And log a warning if any user ends up with rights === 0.
PT: Na migração --nedbtodb, copiar explicitamente rights (e quaisquer outros campos de permissão/flag) do registro NeDB de origem para o insert Mongo, e adicionar uma asserção pós-migração de que todo documento type:"user" tem rights > 0. Exemplo:
// durante a transformação do registro
const rights = (src.rights !== undefined && src.rights !== null) ? src.rights : 4294967295;
mongoDoc.rights = rights;
E registrar um aviso se algum usuário terminar com rights === 0.
Environment / Ambiente
- MeshCentral version:
1.2.5
- Node.js:
v24.18.1
- Migration: NeDB → MongoDB
7.0.40
- OS: Alpine 3.24 (container
ylianst/meshcentral / meshcentral-aio)
Title (EN):
--nedbtodbmigration silently zeroes userrights(all users lose admin permissions)Título (PT): Migração
--nedbtodbzera silenciosamente o camporightsdos usuários (todos perdem permissões de admin)Summary / Resumo
EN: When running
node meshcentral.js --nedbtodbto migrate from NeDB to MongoDB, therightsfield of every user document is not carried over — it ends up as0(or missing) in the MongoDB target. The result is that all users lose every permission, including the server administrator (0xFFFFFFFFexpected). There is no error, no warning, and the server starts normally — but no user can administer anything, and the File Management / server-side file access (bit0x200) is silently disabled for everyone.PT: Ao executar
node meshcentral.js --nedbtodbpara migrar de NeDB para MongoDB, o camporightsde todos os documentos de usuário não é preservado — ele termina como0(ou ausente) no destino MongoDB. O resultado é que todos os usuários perdem todas as permissões, inclusive o administrador do servidor (que deveria ser0xFFFFFFFF). Não há erro nem aviso: o servidor sobe normalmente, mas nenhum usuário consegue administrar nada, e o File Management / acesso a arquivos no servidor (bit0x200) fica desativado silenciosamente para todos.Steps to reproduce / Passos para reproduzir
EN:
rights=4294967295(0xFFFFFFFF).settings.mongodbinconfig.jsonto a MongoDB connection string.node meshcentral.js --nedbtodb.node meshcentral.js).rights: 0(or the field is absent).PT:
rights=4294967295(0xFFFFFFFF).settings.mongodbnoconfig.jsonapontando para um MongoDB.node meshcentral.js --nedbtodb.node meshcentral.js).rights: 0(ou o campo está ausente).Root cause / Causa raiz
EN: The NeDB→Mongo migration path (
--nedbtodb, indb.js) copies themeshcentralcollection documents but does not preserve therightsinteger. Either the field is dropped during the document transform, or the Mongousersschema/insert defaults it to0. Because NeDB storedrightsas a top-level number and the Mongo path re-serializes the record, the value is lost. The migration logs "Done. N record(s)" but never validates that permission bits survived.PT: O caminho de migração NeDB→Mongo (
--nedbtodb, emdb.js) copia os documentos da collectionmeshcentral, mas não preserva o inteirorights. Ou o campo é descartado durante a transformação do documento, ou o schema/insert Mongo do usuário o define como0por padrão. Como o NeDB armazenavarightscomo número de nível superior e o caminho Mongo re-serializa o registro, o valor é perdido. A migração registra "Done. N record(s)", mas nunca valida se os bits de permissão sobreviveram.Impact / Impacto
EN: Data corruption / silent privilege loss. Any operator migrating to MongoDB (the recommended path on Node 22/24, where NeDB is deprecated) ends up with a server where nobody can administer anything. High severity because it is silent and affects 100% of migrated users.
PT: Corrupção de dados / perda silenciosa de privilégios. Qualquer operador que migra para MongoDB (o caminho recomendado no Node 22/24, onde NeDB está obsoleto) acaba com um servidor onde ninguém consegue administrar nada. Severidade alta porque é silencioso e afeta 100% dos usuários migrados.
Suggested fix / Correção sugerida
EN: In the
--nedbtodbmigration, explicitly copyrights(and any other permission/flag fields) from the source NeDB record to the Mongo insert, and add a post-migration assertion that everytype:"user"document hasrights > 0. Example:And log a warning if any user ends up with
rights === 0.PT: Na migração
--nedbtodb, copiar explicitamenterights(e quaisquer outros campos de permissão/flag) do registro NeDB de origem para o insert Mongo, e adicionar uma asserção pós-migração de que todo documentotype:"user"temrights > 0. Exemplo:E registrar um aviso se algum usuário terminar com
rights === 0.Environment / Ambiente
1.2.5v24.18.17.0.40ylianst/meshcentral/meshcentral-aio)