【发布时间】:2017-09-18 16:58:03
【问题描述】:
我需要在每次请求 api 之前检查用户状态并返回 403,如果它是非活动用户。
我尝试在通配符beforeRemote 中执行检查,但我必须为我想要限制访问的每个模型注册它。
也可以注册 express 中间件,但 req.accessToken 到那时还不存在。
有没有更好的方法来限制用户访问?
【问题讨论】:
标签: loopbackjs strongloop
我需要在每次请求 api 之前检查用户状态并返回 403,如果它是非活动用户。
我尝试在通配符beforeRemote 中执行检查,但我必须为我想要限制访问的每个模型注册它。
也可以注册 express 中间件,但 req.accessToken 到那时还不存在。
有没有更好的方法来限制用户访问?
【问题讨论】:
标签: loopbackjs strongloop
作为一个选项,您可以尝试引入一个新角色 ACTIVE_USER 并使用 ACL 来控制访问。一些文档链接:roles 和 access control concepts。
【讨论】:
inactive 角色(通配符DENY)后,我通过运行$ DEBUG=loopback:security:acl slc run 检查调试输出。 inactive 角色(得分 7511)与 $owner 角色(得分 8016)重叠。这就是计算 acl 优先级的方式。
为此使用一个简单的快速中间件怎么样?
app.use(function checkIfUserIsActive(req, res, next) {
if (!req.accessToken) {
// User not logged in
return next();
}
app.models.UserModel.findById(req.accessToken.userId, function (err, user) {
if (err) {
// Error with finding the user
return next(err);
}
if (!user) {
return next(new Error('No user with this access token was found.'));
}
if (!user.active) {
return next(new Error('User is inactive.'));
} else {
return next();
}
});
});
【讨论】:
【讨论】: