2014-10-12 16 views
6

Ho bisogno di creare uno schema per un'applicazione multiutente che ho bisogno di sviluppare usando MongoDB, Express, AngularJS e NodeJS. Ho 4 tipi di utenti in quell'applicazione, GUEST, REGISTERED_USER, SUBSCRIBER, ADMIN. Una volta che l'utente ha registrato l'applicazione, ho bisogno di visualizzare moduli e informazioni in base ai ruoli di un particolare utente.Schema Mongoose per applicazione Multi-utente

Qualcuno potrebbe darmi qualche idea su come gestire lo schema per i diversi ruoli di un utente, perché potrei in seguito usarlo per funzionalità di ruolo e livello di accesso?

Ad esempio, il seguente registeredUserSchema è comune per REGISTERED_USER, SUBSCRIBER, ADMIN utenti:

var registeredUserSchema = mongoose.Schema({ 
    userId: String, 
    fullName: String , 
    email: String, 
    password: String, 
    created: { type: Date, default: Date.now }, 
    roles: [String] 
}); 

Ma poi ho bisogno di un sacco di informazioni per essere chiesto da un utente con SUBSCRIBER ruolo così una volta che ha registrato l'applicazione, vorrei mostrare molte informazioni extra per mostrargli essere riempito nelle sue informazioni di acocunt, di un utente con solo REGISTERED_USER.

Qualcuno potrebbe aiutarmi?

EDIT: Più analitico

Ad esempio, un REGISTERED_USER avrà userId, ma un utente con SUBSCRIBER ruolo sta per avere subscriberId. Quindi ho bisogno di decidere come strutturare i dati in quanto vi sono dati che sono comuni per tutti gli utenti e quindi ci sono dati diversi per ogni utente in base al suo ruolo. Ho bisogno di aiuto sulla strategia per scegliere di strutturare quei dati. Ad esempio, in Java Persistence API abbiamo varie strategie di ereditarietà per strutturare i dati nelle tabelle di database relazionali.

risposta

6

Sto usando questo collezioni per questa parte:

var permissions_schema = mongoose.Schema({ 
    name : String, 
    title : String 
}); // this are mostly static data 

var roles_schema = mongoose.Schema({ 
    name : String, 
    title : String, 
    _permissions : Array 
});// _permissions is an array that contain permissions _id 

var contacts_schema = mongoose.Schema({ 
    mobile : String, 
    password : String, 
    first_name : String, 
    last_name : String, 
    _role : Number, 
    _enabled : Boolean, 
    _deleted : Boolean, 
    _verify_code : Number, 
    _groups_id : Array, 
    _service_id : String 
}); // and at last _role is _id of the role which this user owns. 

con qualcosa come queste collezioni è possibile gestire gli utenti facilmente. Spero che queste abbiano buone idee per te.

AGGIORNAMENTO: Uno schema più flessibile può disporre di un array di ID ruolo nell'oggetto contatto e il contatto può avere molti ruoli e le sue autorizzazioni sono l'unione di tutte le autorizzazioni dei ruoli.

+0

La cosa che ho è che basa sul ruolo di un utente che ho bisogno di chiedere e salvare le informazioni nel database. Ad esempio, un utente registrato avrà 'userId', ma un utente con ruolo di sottoscrittore avrà' subscriberId'. Quindi ho bisogno di decidere come strutturare i dati in quanto vi sono dati che sono comuni per tutti gli utenti e quindi ci sono dati diversi per ogni utente in base al suo ruolo. Ho bisogno di aiuto sulla strategia per scegliere di strutturare quei dati. Ad esempio, in Java Persistence API abbiamo varie strategie di ereditarietà per strutturare i dati nelle tabelle di database relazionali. – skip

1

Ecco lo schema utente dal generatore Yeoman ponteggio MEAN.JS:

var UserSchema = new Schema({ 
    firstName: { 
     type: String, 
     trim: true, 
     default: '', 
     validate: [validateLocalStrategyProperty, 'Please fill in your first name'] 
    }, 
    lastName: { 
     type: String, 
     trim: true, 
     default: '', 
     validate: [validateLocalStrategyProperty, 'Please fill in your last name'] 
    }, 
    displayName: { 
     type: String, 
     trim: true 
    }, 
    email: { 
     type: String, 
     trim: true, 
     default: '', 
     validate: [validateLocalStrategyProperty, 'Please fill in your email'], 
     match: [/.+\@.+\..+/, 'Please fill a valid email address'] 
    }, 
    username: { 
     type: String, 
     unique: 'testing error message', 
     required: 'Please fill in a username', 
     trim: true 
    }, 
    password: { 
     type: String, 
     default: '', 
     validate: [validateLocalStrategyPassword, 'Password should be longer'] 
    }, 
    salt: { 
     type: String 
    }, 
    provider: { 
     type: String, 
     required: 'Provider is required' 
    }, 
    providerData: {}, 
    additionalProvidersData: {}, 
    roles: { 
     type: [{ 
      type: String, 
      enum: ['user', 'admin'] 
     }], 
     default: ['user'] 
    }, 
    updated: { 
     type: Date 
    }, 
    created: { 
     type: Date, 
     default: Date.now 
    }, 
    /* For reset password */ 
    resetPasswordToken: { 
     type: String 
    }, 
    resetPasswordExpires: { 
     type: Date 
    } 
}); 
+0

Se ho 3 ruoli, diciamo 'REGISTERED_USER',' SUBSCRIBER' e 'ADMIN', e ci sono alcuni dati comuni in ognuno dei ruoli, quindi come dovrei strutturare quei dati per salvarli nel database. Ad esempio, cosa succede se 'UserSchema' sono dati che sono i dati comuni che devono essere salvati per gli utenti di uno dei 3 ruoli? Come faccio a strutturare lo schema per gli utenti con altri ruoli? Grazie per la risposta. – skip

+2

È possibile aggiungere ulteriori informazioni a UserSchema e compilarlo solo se il ruolo corrisponde a ciò che dovrebbe. –

+0

Ma come dovrei occuparmi della registrazione dell'utente che voglio assegnare solo il ruolo 'REGISTRATO_USER' alla registrazione e l'utente a cui vorrei assegnare il ruolo' SUBSCRIBER'? – skip

Problemi correlati