我已经在Node.js中开发了应用程序。我正在使用Sequelize for MSSQL,并且创建了API,我正在Angular中使用API。
我想知道的是关于安全性:我已经实现了JWT进行身份验证。现在我要实施角色权限管理,我的要求是:
因此,用户可以具有一个或多个“一个”角色,并且一个角色可以具有一个或多个“一个”权限。许可就像创建记录,删除记录等。 用户可以访问他拥有权限的API。
是否有NPM包或其他建议?
到目前为止,我发现了这一点:user-groups-roles https://www.npmjs.com/package/user-groups-roles
答案 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;