Кажется, что 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 });
});
А в интерфейсе вы делаете:
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))
});
}
}
https://stalniy.github.io/casl/v4/en/api/casl-ability-extra