2017-08-31 2 views
0

Ich versuche, node_acl zu verwenden, um die Autorisierung in meiner App zu verwalten. Aber ich habe Zweifel, wie die Rolle zu implementieren für jeden BenutzerBenutzerrolle definieren node_acl, mongoose, express

app.js

const mongoose = require('mongoose'); 
const app = express(); 
const security = require(./security/security_acl); 

//----------Database Connection ------------------------------ 
mongoose.Promise = global.Promise; 
mongoose.connect('mongodb://localhost/db_test', { useMongoClient: true }) 
    .then(() => logger.info('Database connected')) 
    .catch(error => logger.error('Database connection error: $(error.message)')) 
const db = mongoose.connection; 

// all other middleware functions 

security_acl.js

'use strict'; 
const mongoose = require('mongoose'); 
const node_acl = require('acl'); 
var acl; 
acl = new node_acl(new node_acl.mongodbBackend(mongoose.connection.db, 'acl_')); 

set_roles(); 

function set_roles() { 

    acl.allow([{ 
     roles: 'admin', 
     allows: [{ 
       resources: '/api/config', 
       permissions: '*' 
      } 
     ] 
    }, { 
     roles: 'user', 
     allows: [{ 
      resources: 'clients', 
      permissions: ['view', 'edit', 'delete'] 
     }] 
    }, { 
     roles: 'guest', 
     allows: [] 
    }]); 

    acl.addUserRoles('5863effc17a181523b12d48e', 'admin').then(function (res){ 
     console.log('Good'); 
    }).catch(function (err){ 
     console.log('Bad'); 
    }); 

} 

module.exports = acl; 

Benutzermodell

const userSchema = Schema({ 
    username: { 
    type: String, 
    required: [true, 'Username can't be empty''] 
    }, 
    email: { 
    type: String, 
    required: [true, 'email can't be empty''] 
    }, 
    encrypted_password: { 
    type: String, 
    required: [true, 'Password can't be empty''] 
    }, 

    role: { 
    type: Schema.Types.ObjectId, 
    ref: 'roles', 
    required: [true, 'Role can't be empty'] 
    } 
}, { 
    timestamps: true 
}); 

In meinem Benutzer Modell Ich habe einen Verweis auf das Modell ROLES.

Wie die Benutzer-ID und die Rolle an die Funktion übergeben können acl.addUserRoles für alle Nutzer (neue und bisher registriert)

Vielen Dank im Voraus

Antwort

0

dieses Versuchen

userModel.find().populate("roles").exec().then(users => { 
    users.forEach(user => 
     acl.addUserRoles(user._id, user.roles.map(role => role.name)); 
    ) 
}) 
Verwandte Themen