首页 > 解决方案 > 如何在某些应用程序上实现基于用户的权限?

问题描述

我目前有一个用 nodejs 和 express 实现的 rest api。

有一个登录端点供用户进行身份验证,我正在使用 JWT 来授权请求​​。

API 在 api 中有多个“应用程序”,例如一个“退货应用程序”,供用户处理客户退货。

我想为每个用户分配一个角色和几个应用程序,以便用户可以访问“退货应用程序”和“评论应用程序”并执行操作但无权访问“购买应用程序”

我目前有一些中间件可以识别用户并将其附加到请求中:

module.exports = function(req, res, next) {

    // verify user with JWT
    req.user = JWT;
    next();

}

如何为每个应用程序实现基于角色的权限?

我希望能够按照以下方式为用户分配多个应用程序和角色:

user1: {
    "role": "editor"
    "apps": ["returns", "reviews"]
}

有没有实现这种功能的好方法?

编辑:

如果 JWT 包含:

const user = {
    name: John,
    role: "editor",
    apps: ["returns", "reviews"]
}

我应该如何使用中间件解析 JWT 以确定用户授权。例如,“编辑”角色具有

谢谢

标签: node.jsexpress

解决方案


您可以在创建 jwt 有效负载时设置权限。

const payload = {
    role: "editor",
    apps: ["returns", "reviews"]
}

jwt.sign(payload, jwtSecret)

并根据您收到的 jwt 中包含的权限授予对不同应用程序的访问权限。

编辑:

处理权限的中间件可能如下所示:

function reviewsPermissions(req, res, next) {
    const token = jwt.decode(req.headers.authorization)

    if (token.apps.includes('reviews') && token.role === 'editor')
        next()
    else 
        res.status(401).json({ error: "Access restricted to editors."})
}

router.post('/reviews', reviewsPermissions, (req, res) => {
    // Your code
})

推荐阅读