node.js中基于用户角色和权限的访问

时间:2018-11-28 10:59:41

标签: node.js authorization

我已经在Node.js中开发了应用程序。我正在使用Sequelize for MSSQL,并且创建了API,我正在Angular中使用API​​。

我想知道的是关于安全性:我已经实现了JWT进行身份验证。现在我要实施角色权限管理,我的要求是:

  1. 一个用户可以具有多个角色(管理员,管理员)。
  2. 角色可以拥有 多个权限(创建,更新等)。

因此,用户可以具有一个或多个“一个”角色,并且一个角色可以具有一个或多个“一个”权限。许可就像创建记录,删除记录等。 用户可以访问他拥有权限的API。

是否有NPM包或其他建议?

到目前为止,我发现了这一点:user-groups-roles https://www.npmjs.com/package/user-groups-roles

2 个答案:

答案 0 :(得分:0)

您可以在db中创建新表,例如“ user-roles”,在其中传递所需的角色,然后将用户与所需的角色连接起来。然后在服务器上,您应该创建中间件,以检查用户是否具有特定端点的权限(如果未抛出401/403)。

答案 1 :(得分:0)

首先,您需要创建包括角色的用户模型。 userModel.js

const mongoose=require('mongoose');
const validator=require('validator');
const userSchema=new mongoose.Schema({
    name:{
        type:String,
        required:[true,'Please tell us your name ']
    },
    email:{
        type:String,
        required:[true,'Please provide your mail'],
        unique:true,
        lowercase:true,
        validate:[validator.isEmail,'Please provide valid email'],
    },
role:{
        type:String,
        enum:['user','guide','admin'],
        default:'user'
    },
})
const User=mongoose.model('User',userSchema);
module.exports=User;

您可以使用此代码进行角色验证。 (authController.js)

exports.restictTo=(...roles)=>{
    return(req,res,next) =>{
        //role ['admin','guide'].role=user
      if(!roles.includes(req.user.role)){
          return next(consloe.log('You do not have permission to perform this action',403));
      }
      next();
    }
}

最后,您可以在路线内调用restictTo函数 authRoute.js

    const express=require('express');

    const authController=require('./../controllers/authController')
    const router=express.Router();
    router.route('/').get(authController.protect,authController.restictTo('admin'),userController.getalluser);
module.exports=router;