Search code examples
javascriptalgorithmreactjsmeteormeteor-accounts

Meteor: Two types of user, the way to go with complexe UserAccounts?


I'm using Meteor/react and flowRouter and I would like to create an app with two kinds of users; let's say the stay simple:

  • Client
  • Provider

  • In fact Client has some "UserAccounts" fields (name, password, email ...) but I would like to add many of others: Idk like Passport Number, Social Security Number, Bank Account etc ...

  • The Provider could fill this fields if he wants too (so could have the same "role") but its main goal is to have other fields like idk: Job title, Category Job, Other Password etc ..

So Is some of you used the package UserAccounts to do this or you created a system by yourself ? Of course I wish using email validation etc ... The application Ui would like to have a search component searching for Providers and only in Providers.

Also, I will use two Registration form (same page but two forms) but one Login modal for both types.

My question is, is it a good thing to use userAccount, and probably I will need roles for the two roles, but do UserAccount accept many others custom fields, do I have to set in in 'Profile' and won't it slow too much the application with only one user collection ?

Thanks guys for the mind blowing help :)


Solution

  • Yes, you can use userAccount for your case & No, it won't slow down to any noticeable amount.

    To manage different roles you can use alaning:roles package. It helps you limit access to certain parts of code to roles and groups.

    UPDATE: (Edit)

    As Pointed out in comments, it is not advisable to use profile as it is automatically publishes. Instead try this: Regarding, second part of adding more fields in user account, you can add any number of fields in the profile section. The document will look something like this:

    {
    
    
      _id: "bbca5d6a-2156-41c4-89da-0329e8c99a4f",  // Meteor.userId()
      username: "cool_kid_13", // unique name
      emails: [
        // each email address can only belong to one user.
        { address: "[email protected]", verified: true },
        { address: "[email protected]", verified: false }
      ],
      createdAt: Wed Aug 21 2013 15:16:52 GMT-0700 (PDT),
      profile: {
            //profile data
           },
    passportNo:'PASSPORT',
    ssn:'SSSN',
    oneMoreField: 'OneMoreField',
    }
    

    By default, here only email, username and profile will be published and your other data will not be visible to client unless published and subscribed.

    You can read more about accounts here