ability.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import { Plugin } from '@nuxt/types'
  2. import { Ability } from '@casl/ability'
  3. import { $abilitiesUtils } from "~/services/rights/abilitiesUtils";
  4. /**
  5. * Au moment de la phase D'init de Nuxt...
  6. * @param ctx
  7. */
  8. const abilityPlugin: Plugin = (ctx) => {
  9. //Nécessaire pour que l'update des abilité soit correct après la phase SSR
  10. ability.update(ctx.store.state.profile.access.abilities);
  11. /**
  12. * Au moment où l'on effectue un SetProfile via le store Organization, il faut aller récupérer
  13. * les différentes abilitées que l'utilisateur peut effectuer. (Tout cela se passe en SSR)
  14. */
  15. const unsubscribe = ctx.store.subscribeAction({
  16. after: (action, state) => {
  17. switch (action.type) {
  18. case 'profile/organization/setProfile':
  19. //On récupère les abilités
  20. const abilitiesUtils = $abilitiesUtils(ctx.store, ability)
  21. const abilities = abilitiesUtils.getAbilities();
  22. //On les store puis on update le service ability pour le mettre à jour.
  23. ctx.store.commit('profile/access/setAbilities', abilities)
  24. ability.update(abilities);
  25. //Unsubscribe pour éviter les memory leaks
  26. unsubscribe()
  27. break;
  28. }
  29. }
  30. })
  31. //Déclare un nouvel accesseur de service via le context Nuxt
  32. ctx.$ability = () => {return ability}
  33. }
  34. export default abilityPlugin
  35. export const ability = new Ability();