ACL узла не работает при попытке назначить разрешения - PullRequest
0 голосов
/ 18 сентября 2018

У меня проблемы с назначением пользовательских ролей и разрешений с использованием 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 для нескольких модулей?

...