Как я могу использовать Контроль доступа npm для RBA C, когда Роль, Действие, Ресурс получены из коллекции mongodb? - PullRequest
0 голосов
/ 05 апреля 2020

Я использую Контроль доступа npm пакет Контроль доступа npm. Можно ли каким-то образом получить Role, Action & Resource из коллекции mongodb и использовать его с этим контролем доступа npm?

Если вы видите на рисунке ниже, я определил одну роль. js file используя этот контроль доступа npm и другую сторону, я передаю readOwn (действие), профиль (ресурс) этой роли. js используя промежуточное ПО, я просто хочу эти два атрибута из коллекции MongoDB на основе роли пользователя, таким образом Я могу сделать Dynami c RBA C. Как я могу использовать эти два атрибута от таблицы к промежуточному программному обеспечению?

, пожалуйста, посмотрите это изображение

// сервер / роли. js

const AccessControl = require("accesscontrol");
const ac = new AccessControl();

exports.roles = (function() {
ac.grant("user")
 .readOwn("profile")
 .updateOwn("profile", ["comment"])
 .deleteOwn("profile");

ac.grant("pujari")
 .extend("user")
 .readAny("profile");

ac.grant("shopkeeper")
 .extend("user")
 .extend("pujari")
 .updateAny("profile")
 .deleteAny("profile");

return ac;
})();

// Маршруты

var express = require('express');
var router = express.Router();
const verify=require('../Authentication/verifyToken');
var UserController = require('../controllers/user');
const User = require('../models/user');

// Create a new user
router.post('/register', User.hashPwd, UserController.create);

// Retrieve All users
router.get('/details', verify.allowIfLoggedin, verify.grantAccess('readOwn', 'profile'), UserController.findAll);

// npm контроль доступа

grantAccess: function(action, resource) {

    return async (req, res, next) => {
      try { 
        var role = returnRole(req);
        const permission = roles.can(role)[action](resource);
        console.log(permission.granted);
        console.log(permission.attributes);
      if (!permission.granted) {
        return res.status(401).json({
        error: `${role} role don't have enough permission to perform this action`
        });
      }
      next();
      } catch (error) {
        next(error);
      }
    };
  },
...