| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- import { Plugin } from '@nuxt/types'
- import { Ability } from '@casl/ability'
- import { $abilitiesUtils } from "~/services/rights/abilitiesUtils";
- /**
- * Au moment de la phase D'init de Nuxt...
- * @param ctx
- */
- const abilityPlugin: Plugin = (ctx) => {
- //Nécessaire pour que l'update des abilité soit correct après la phase SSR
- ability.update(ctx.store.state.profile.access.abilities);
- /**
- * Au moment où l'on effectue un SetProfile via le store Organization, il faut aller récupérer
- * les différentes abilitées que l'utilisateur peut effectuer. (Tout cela se passe en SSR)
- */
- const unsubscribe = ctx.store.subscribeAction({
- after: (action, state) => {
- switch (action.type) {
- case 'profile/organization/setProfile':
- //On récupère les abilités
- const abilitiesUtils = $abilitiesUtils(ctx.store, ability)
- const abilities = abilitiesUtils.getAbilities();
- //On les store puis on update le service ability pour le mettre à jour.
- ctx.store.commit('profile/access/setAbilities', abilities)
- ability.update(abilities);
- //Unsubscribe pour éviter les memory leaks
- unsubscribe()
- break;
- }
- }
- })
- //Déclare un nouvel accesseur de service via le context Nuxt
- ctx.$ability = () => {return ability}
- }
- export default abilityPlugin
- export const ability = new Ability();
|