如何使用expressjs和passport在nodejs中实现基于 Angular 色的授权/访问控制以及如何完美设计 Angular 色中间件?
我有两种登录类型管理员和用户
以管理员和用户的名义创建两个模型和路由器哪个最好?
1.检查用户是否isAdmin
2.
// To authtenticate the User by JWT Startegy
module.exports = (userType, passport) => {
let opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt');
opts.secretOrKey = config.secret;
passport.use(new JwtStrategy(opts, (jwt_payload, done) => {
if (userType == 'admin') {
Admin.getAdminById(jwt_payload.data._id, (err, user) => {
if (err) return done(err, false);
if (user) return done(null, user);
return done(null, false);
});
}
if (userType == 'users') {
User.getUserById(jwt_payload.data._id, (err, user) => {
if (err) return done(err, false);
if (user) return done(null, user);
return done(null, false);
});
}
}));
}
最佳答案
为什么你想要有2个地方来获取用户数据?
拥有用户并为其分配 Angular 色。
最简单的访问控制系统是:访客、登录、管理员。
因此,在表users
中添加一个role
列,其值为:user、admin。
现在你编写中间件:
const isLogged = function (req, res, next) {
if (req.user)
return next ();
res.send ('unauth')
}
const isAdmin = function (req, res, next) {
if (req.user.role == 'admin')
return next ();
res.send ('only admin')
}
及用法:
app.get('/', (req, res)=>{})
app.get('/profile',isLogged, (req, res)=>{})
app.get('/admin',isLogged, isAdmin, (req, res)=>{})
对于更高级的需求,请尝试查找一些 ACL 模块
关于javascript - 如何在nodejs中实现passportjs中的用户角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55472167/