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();