如果用户未经授权,则有一个中间件拒绝通过路由访问
module.exports = async function (req, res, next) {
try {
const authorizationHeader = req.headers.authorization;
if (!authorizationHeader) {
return next(ApiError.UnauthorizedError());
}
const accessToken = authorizationHeader.split(' ')[1]; // отсекаем bearer берём токен
if (!accessToken) {
return next(ApiError.UnauthorizedError());
}
const userData = await tokenService.validateAccessToken(accessToken);
if (!userData) {
return next(ApiError.UnauthorizedError());
}
req.user = userData
next()
} catch (e) {
next(ApiError.UnauthorizedError());
}
};
但我不太明白如何正确实现属于特定用户的元素的删除、编辑(等)
而就结构而言,是在中间件还是服务或数据库级别完成的?
ps - 如果重要,项目使用jsonwebtoken. 还有express_mongoose
我知道实现此行为的两种方法:
在您的情况下,据我了解,使用的是纯 JavaScript,而不是 TypeScript,如果您选择第二条路径,这可能会使您的生活复杂化,因为我使用了class-transformer,并且原则上我的实现非常依赖于装饰器。
我认为您应该阅读 的文档
CASL Ability,如果您喜欢它,请实施它。就我而言,我需要向用户隐藏数据,并根据他的权限拒绝访问任何操作,这需要实现单独的模块来处理这个问题。在您的 Habré 文章示例中,这也可以在控制器级别实现,即在删除或编辑文章之前,检查用户的作者身份,如果不是,则丢弃
res.status(403).end().