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



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

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

  1. 一个用户可以有多个角色(管理员、管理员(
  2. 一个角色可以有多重权限(创建、更新等(

因此,用户可以拥有一个或多个"同一个"角色,并且,一个角色可以拥有一种或多种"同一权限"。权限类似于创建记录、删除记录等。用户可以访问他有权限访问的API。

是否有任何一揽子NPM或任何其他建议?

到目前为止,我已经发现:用户组角色https://www.npmjs.com/package/user-groups-roles

您可以在数据库中创建新表,例如"用户角色",传递您想要的角色,然后将用户和您想要的任务连接起来。然后,在服务器上,您应该创建中间件来检查用户是否有权访问特定的端点,如果没有抛出401/403的话。

首先,您需要创建包括角色在内的用户模型。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;

相关内容

最新更新