nodeJS中的JWT管理员角色检查

Posted

技术标签:

【中文标题】nodeJS中的JWT管理员角色检查【英文标题】:JWT admin role checking in nodeJS 【发布时间】:2018-10-26 19:10:03 【问题描述】:

我如何检查数据修改(在网站上)是由用户还是由管理员创建的?

我正在使用 JWT、nodeJS、typescript(和 postman 进行测试)

这是我的“获取所有用户”方法:

用户架构:

export const userSchema = new Schema(
 username:  type: String, required: true, unique: true ,
 firstName:  type: String, required: true ,
 lastName:  type: String, required: true ,
 email:  type: String, required: true, unique: true ,
 password:  type: String, required: true ,
 isAdmin:  type: Boolean 

用户路由:

    public getAll = async (req: any, res: any) => 
    try 
        const users = await User.find().exec();
        res.status(200).json(users);
     catch (err) 
        res.status(400).json(err);
    

我应该用一个条件来扩展它吗?

let user = await User.findById(req.params.id).exec();
if(user.isAdmin)

     //CODE

else

    res.status(400).json(err);

或者有什么更好的实现方式?谢谢

【问题讨论】:

【参考方案1】:

您可以使用已实现的代码作为中间件。

代替:

在您的用户类中:

public IsAdmin(req: any, res: any, next: any) 
  //CODE GOES HERE 

在您的路线文件中:

而不是这个:

app.get("/alluser", getall);

写这个:

app.use(User.IsAdmin);
app.get("/alluser", User.IsAdmin, User.getall);

app.use() 提供中间件将被调用。

【讨论】:

以上是关于nodeJS中的JWT管理员角色检查的主要内容,如果未能解决你的问题,请参考以下文章

nodejs中的管理员用户角色

在 JWT 令牌中存储用户权限的最佳做法是啥?

使用 express-jwt 进行基于角色的授权?

使用JsonWebToken反应保护管理面板

Spring Security 检查外部 JWT 角色

使用 JWT 的角色