Luc*_*rna 4 javascript node.js reactjs casl
我正在寻找一种在前端(React)和后端(Node.js、Koa、GraphQL)中实现授权的方法。我偶然发现了 casl 包: https: //github.com/stalniy/casl。
虽然后端授权对我来说似乎非常简单,但我不明白的是如何将我的授权规则从后端共享到前端。一篇中等帖子建议使用 JWT 代币。如何使用 JWT 令牌来做到这一点?
https://medium.com/dailyjs/casl-and-cancan-permissions-sharing- Between-ui-and-api-5f1fa8b4bec
看来 CASL 有 2 个函数可以实现这一点,packRules 和 unpackRules。
根据后端的文档,您可以执行以下操作:
import { packRules } from '@casl/ability/extra';
import jwt from 'jsonwebtoken';
import { defineRulesFor } from '../services/appAbility';
app.post('/session', (req, res) => {
const token = jwt.sign({
id: req.user.id,
rules: packRules(defineRulesFor(req.user))
}, 'jwt secret', { expiresIn: '1d' });
res.send({ token });
});
Run Code Online (Sandbox Code Playgroud)
在前端你可以:
import { unpackRules } from '@casl/ability/extra'
import jwt from 'jsonwebtoken';
import ability from '../services/appAbility';
export default class LoginComponent {
login(params) {
return http.post('/session')
.then((response) => {
const token = jwt.decode(response.token);
ability.update(unpackRules(token.rules))
});
}
}
Run Code Online (Sandbox Code Playgroud)
https://stalniy.github.io/casl/v4/en/api/casl-ability-extra