У меня проблемы с назначением пользовательских ролей и разрешений с использованием Node ACL .Я новичок в стеке MEAN, поэтому действительно не понимаю, как работает нод или фреймворк javascript.
Я пытаюсь создать систему регистрации, когда пользователь зарегистрирован, ему будет назначено user
роль вместе с user permissions
.
Вот мой код до сих пор
* server.js *
Это точка входа моего приложения узла
var acl;
var app = express();
//Importing other required files
var databaseConfig = require('./config/database');
var routes = require('./routes/index');
//Connect to the database
//Set up default mongoose connection
mongoose.connect(databaseConfig.url,{ useNewUrlParser: true },_mongo_connected);
function _mongo_connected( error, db ) {
if (error){
console.log(chalk.red('Could not connect to database. Error '+error));
} else{
console.log(chalk.green('Connected to database '+ config.db.uri));
var mongoBackend = new node_acl.mongodbBackend(db);
acl = new node_acl( mongoBackend);
global.ACL = acl; // I set it global so i can use it else where
set_roles();
}
}
function set_roles() {
acl.allow([
{
roles: 'admin',
allows: [
{ resources: '*', permissions: '*' }
]
}, {
roles: 'user',
allows: [
{ resources: '/api/user',permissions:['get', 'put', 'delete'] }
]
}, {
roles: 'guest',
allows: []
}
]);
acl.addRoleParents( 'user', 'guest' );
acl.addRoleParents( 'admin', 'user' );
}
Мой файл маршрута * маршруты / index.js *
var express = require('express');
var router = express.Router();
var authController = require('../app/Controllers/AuthController');
router.post('/registration',authController.registration);
Теперь * AuthController.js *
const User = require('../Models/User');
exports.registration = function (req, res) {
let errors = [];
if (!req.body.email ){
errors.push('Please enter your email');
}
if (errors.length){
//There are errors
res.json({
code:420,
success:false,
msg:'One or more filed are missing',
errors:errors
});
} else{
let newUser = new User({
name:req.body.name,
email:req.body.email,
password:req.body.password,
firstName:req.body.firstName,
lastName:req.body.lastName,
role:'user'
});
User.addUser(newUser,(error,user)=>{
if (error){
res.json({
code:420,
success:false,
msg:'Failed to register user.Probably this email/username is already taken.',
errors:error.errors
});
}else{
console.log('Hello');
console.log('User id',user._id.toString());
ACL.addUserRoles(user._id.toString(), user.role, err => {
if (err) {
console.log(err);
}
console.log('Added', user.role, 'role to user', user.firstName, 'with id', user._id);
});
res.json({
code:200,
success:true,
msg:'User registered successfully'
});
}
})
}
};
Когда я нажимаю на API, пользователь регистрируется в базе данных, после этого ничего не происходит, тогда как я ожидал, что он назначит пользователю user
разрешения.Может кто-нибудь, пожалуйста, помогите мне.
И, как вы можете видеть, я установил ACL
как глобальную переменную, но я не думаю, что так и должно быть.
Я следовал инструкциям здесь: https://blog.codecentric.de/en/2018/07/protecting-resources-with-node_acl-module-in-nodejs/
Как получить доступ к списку ACL для нескольких модулей?