2017-09-21 1 views
0

Mon application dispose de plusieurs types d'utilisateurs. L'inscription pour chacun nécessite des informations différentes (ex: ssn du vendeur, adresse de l'acheteur). Donc, il est logique qu'ils soient des schémas différents. Mais ils partagent également de nombreux domaines (ex: nom, email, mot de passe, questions secrètes, téléphone, etc.).Comment structurer mes schémas de mangouste si j'ai des variations dans les rôles utilisateur (vendeur vs acheteur)?

Que dois-je faire? CopyPaste schéma de l'un à l'autre?

2ème problème est que je utilise passportjs, et il demande pour le modèle utilisateur ...

comme ça dans app.js

var User = require('./models/User'); 
passport.use(new LocalStrategy(User.authenticate())); 

passport.serializeUser(User.serializeUser()); 
passport.deserializeUser(User.deserializeUser()); 

Donc, si j'utilise différents schémas que comment pourrais-je gérer cela? J'ai l'héritage fatigué mais je ne pense pas qu'il y ait de l'héritage dans Mongoose. Et qu'en est-il des validations, je ne veux pas que les validations des vendeurs s'exécutent sur l'acheteur, elles provoqueront une erreur: aucun ssn n'a été donné, et vice versa.

Répondre

0

Il y a plusieurs façons de gérer cela.

Sur la partie Passport, je recommande de découpler votre modèle de compte de votre modèle d'utilisateur. L'utilisateur a le profil, tandis que le compte a le truc de connexion. Un utilisateur a aussi un compte (par référence probablement).

Sur la partie des rôles, je recommanderais également que chaque utilisateur dispose d'un rôle, qui est probablement un document incorporé. Une partie de cela peut être des champs communs. Pour les champs uniques, je commencerais simplement avec juste un objet de type Mixed, de sorte que vous pouvez y ajouter ce que vous voulez.

+0

Si les types d'utilisateurs ont un rôle en tant que document incorporé, alors pour savoir si l'utilisateur est vendeur ou acheteur, je devrais faire quelque chose comme ceci 'user.role.type == 1' alors qu'en ce moment c'est' user.seller = = true'. pouvez-vous montrer un exemple de schéma? –

+0

Comme je l'ai dit, il existe différentes façons de le gérer en fonction de ce que vous voulez optimiser. – Paul