node.js - 如何在某些应用程序上实现基于用户的权限?
问题描述
我目前有一个用 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 以确定用户授权。例如,“编辑”角色具有
谢谢
解决方案
您可以在创建 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
})
推荐阅读
- android - 更新后如何使回收站视图不滚动回顶部
- python - 转换 Pandas DataFrame 日期,以便我可以选择特定日期
- javascript - React 和 Material UI 第二个选择器取决于第一个选择
- javascript - 在多条件下拉过滤器中,如何显示结果内容?
- database - 应用程序用户的列级安全“策略”
- c# - 如何将参数传递给 Xamarin 中的自定义 ViewCell?
- javascript - 在 CSS 中使用 Overflow-X 时如何防止元素换行?
- gnu-make - 使用 makefile 复制文件
- python - 即使条件为假,如果函数执行也会出现问题
- javascript - 使用代码 h10 加载 heroku 应用程序错误(应用程序崩溃)