在nodeJS中进行JWT管理员角色检查

时间:2018-05-16 16:26:03

标签: node.js typescript mongoose jwt express-jwt

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

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

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

UserSchema:

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 }
}

UserRoute:

    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 个答案:

答案 0 :(得分: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()提供将调用的中间件。