2017-06-28 1 views
2

J'essaie de configurer ACL middleware pour l'authentification de base. Dans cet exemple, j'essaie juste de m'assurer que l'utilisateur (moi-même dans ce cas) a l'autorisation 'admin'.'Autorisations insuffisantes pour accéder à la ressource': ACL Middleware avec Mongoose + Express

Mon parcours ressemble à ceci:

// define the home page route 
router.get('/', acl.middleware(1, '594a984a9815beb8219dca22', 'admin'), function (req, res) { 
    acl.userRoles('594a984a9815beb8219dca22', function(err, roles){ 
     res.send(roles) 
    }) 
}) 

Avec le middleware, je reçois le message:

HttpError: Insufficient permissions to access resource 

Si je lance cette route sans le middleware, la fonction usersRole() ne se fait retour avec

['admin'] 

comme réponse. Je ne peux pas comprendre quoi d'autre doit se passer pour que l'ACL me reconnaisse en tant qu'administrateur. J'ai clairement le rôle 'admin'.

MISE À JOUR

Voici le code de connexion:

var dbConn = mongoose.connect(configDB.url); // connect to our database 
acl = new acl(new acl.mongodbBackend(mongoose.connection.db)) 

Mon config.url être:

module.exports = { 
    'url' : 'mongodb://127.0.0.1:27017/NodeMongo' 
} 
+0

Il est difficile de voir ce que le problème peut-être sans la définition de la fonction acl middleware. – MiiinimalLogic

+0

C'est juste la définition de la vanille de la docs acl https://www.npmjs.com/package/acl#middleware – Ravioli87

Répondre

0

Le problème a à voir avec la nature asynchrone de se connecter à mangouste . Au sein de la route, la connexion mongoose/acl avait déjà été faite, mais pas avant (par exemple, l'appel de la fonction middleware).

J'ai finalement trouvé la bonne façon de le faire grâce à this example par Alex Mueller

Essentiellement, vous devez initialiser l'objet acl à partir du rappel de:

mongoose.connection.on('connected', function(test) { 
    require('./authorization').init(); 
}); 

Ensuite, dans les fichiers de la route, accéder à l'objet acl entièrement initialisé. S'il vous plaît se référer à l'exemple. C'est très facile à suivre.