Come modellare i diritti di accesso in MongoDB rispetto a SQL

3

Ho iniziato a implementare un'applicazione stack MEAN completa (MongoDB, Express, Angular2, node) e sto lottando con la progettazione dei dati per la gestione degli accessi in MongoDB. Nelle mie vecchie tracce di pensiero, ho una potenziale soluzione relazionale in SQL, ma voglio progettarla con MongoDB, se possibile.

Ecco alcuni codice di mangusta sugli schemi:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var AccessGroupSchema = new Schema({
    name : { type: String, required: true, unique: true },
    projects : Schema.Types.Mixed,
    roles : [String],
    state : Number,
});
/* projects:
    { prjid1 : { acl: [String],
                 sub: {
                     subprj1: { acl: [] },
                     subprj2: { acl: [] },
                 },
               },
       prjid2 : { acl: [String],
                 sub: {
                     subprj1: { acl: [] },
                     subprj2: { acl: [] },
                 },
               },
    }
*/
var AccessUserSchema = new Schema({
    userID: { type: Schema.Types.ObjectId, ref: 'User', unique:true },
    created_at: Date,
    updated_at: Date,
    state : Number, // currently ignored.
    groups : [{ type: Schema.Types.ObjectId, ref: 'AccessGroup' }],
});

Ho scritto alcune statistiche e metodi per AccessUser e AccessGroup, ma mentre cercavo di implementare il requisito "per un dato utente elencami tutti i progetti con diritti di progetto e sottoprogetti per linea", ho fallito. La mia soluzione potenziale in SL è la seguente:

Table1: "accessgrp2sub": groupid, subprojectid, acl (Bitfield integer)
Table2: "users2grp": userid, groupid
Table3: "subprojects": subprojectid,projectid,subtitle
Tables: other tables like user,projects, groups...

Esiste un modello di progettazione per l'implementazione di questo modello di relazione in MongoDB? Ho sperimentato molto con il tipo di dati misti negli schemi e anche con il meccanismo di popolamento tra due o più documenti. Attualmente non vedo una soluzione. Qualsiasi aiuto è apprezzato.

    
posta Myonara 07.03.2017 - 19:42
fonte

0 risposte

Leggi altre domande sui tag