Node.js 如何在MEAN stack应用程序中创建具有最高访问权限的超级用户?
我正在用MEAN stack建立一个书评网站,用户可以在这里发布关于书籍的信息。用户只能编辑和删除他/她创建的帖子,这意味着我的授权已经完成,并且工作正常 但现在我想要实现的是一个超级用户。我正在尝试创建一个超级用户,无论是谁创建的,都可以编辑和删除任何帖子。我需要这个,以便我可以监测是否有人张贴任何不良内容 为了前端的授权目的,我使用了一个拦截器类,它截取从Node.js 如何在MEAN stack应用程序中创建具有最高访问权限的超级用户?,node.js,angularjs,typescript,express,mean-stack,Node.js,Angularjs,Typescript,Express,Mean Stack,我正在用MEAN stack建立一个书评网站,用户可以在这里发布关于书籍的信息。用户只能编辑和删除他/她创建的帖子,这意味着我的授权已经完成,并且工作正常 但现在我想要实现的是一个超级用户。我正在尝试创建一个超级用户,无论是谁创建的,都可以编辑和删除任何帖子。我需要这个,以便我可以监测是否有人张贴任何不良内容 为了前端的授权目的,我使用了一个拦截器类,它截取从服务类发送的所有http请求。拦截器如下所示 import { HttpInterceptor, HttpRequest, HttpHan
服务
类发送的所有http
请求。拦截器
如下所示
import { HttpInterceptor, HttpRequest, HttpHandler } from '@angular/common/http';
import { AuthService } from './auth-service';
import { Injectable } from '@angular/core';
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private authService: AuthService) {}
intercept(req: HttpRequest<any>, next: HttpHandler) {
const authToken = this.authService.getToken();
const authRequest = req.clone({
headers: req.headers.set('Authorization', 'Bearer ' + authToken)
});
return next.handle(authRequest);
}
}
const jwt = require("jsonwebtoken");
module.exports = (req, res, next) => {
try {
const token = req.headers.authorization.split(" ")[1];
const decodedToken = jwt.verify(token, "E8PbieHoNk");
req.userData = {email: decodedToken.email, userId: decodedToken.userId};
next();
} catch (error) {
res.status(401).json({
message: 'You are not authorized !'
});
}
};
此处给出了删除的控制器方法
exports.deletePost = (req, res, next) => {
Post.deleteOne({ _id: req.params.id, creator: req.userData.userId }).then(result => {
console.log(req.params.id);
console.log(result);
if(result.n > 0) {
res.status(200).json({message: "Post deleted"});
} else {
res.status(401).json({message: "You Unauthorized"});
}
})
.catch(error => {
res.status(500).json({
message: "Deleting a post failed !"
});
});
}
一切都很好
现在,为了让超级用户能够删除任何帖子,我尝试了将其userId
添加到check auth.js
中间件中,并在controller method fordeletion
中检查是否是帖子创建者用户本人或超级用户,因为我希望两者都能删除。但它没有起作用
这是我试过的
exports.deletePost = (req, res, next) => {
if(req.userData.userId === '5c8cd83a6efff92cf85bd6eb') {
Post.deleteOne({ _id: req.params.id, creator: req.userData.userId }).then(result => {
console.log(req.params.id);
console.log(result);
if(result.n > 0) {
res.status(200).json({message: "Post deleted"});
} else {
res.status(401).json({message: "You Unauthorized"});
}
})
.catch(error => {
res.status(500).json({
message: "Deleting a post failed !"
});
});
} else {
Post.deleteOne({ _id: req.params.id, creator: req.userData.userId }).then(result => {
console.log(req.params.id);
console.log(result);
if(result.n > 0) {
res.status(200).json({message: "Post deleted"});
} else {
res.status(401).json({message: "You Unauthorized"});
}
})
.catch(error => {
res.status(500).json({
message: "Deleting a post failed !"
});
});
}
}
在此,具有最高访问权限的用户id是5c8cd83a6efff92cf85bd6eb
。我想当他登录时,delete方法会从jsonwebtoken
中间件check auth
中获取这个id
,然后让他删除。这就是我试过的
对这个问题提供一些关于更好的实践的线索将意味着很大的帮助。我已经提供了上述所有可能的细节
谢谢你的时间和努力