ability.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { createMongoAbility } from '@casl/ability'
  2. import AbilityBuilder from '~/services/rights/abilityBuilder'
  3. import { useAccessProfileStore } from '~/stores/accessProfile'
  4. import { useOrganizationProfileStore } from '~/stores/organizationProfile'
  5. export const ability = createMongoAbility()
  6. export default defineNuxtPlugin(() => {
  7. const accessProfile = useAccessProfileStore()
  8. const organizationProfile = useOrganizationProfileStore()
  9. // Initialisation, nécessaire pour que l'update des habilités soit correcte après la phase SSR
  10. ability.update(accessProfile.abilities)
  11. const abilityUtils = new AbilityBuilder(
  12. ability,
  13. accessProfile,
  14. organizationProfile,
  15. )
  16. // TODO: voir si on peut se passer du listener
  17. // TODO: clarifier l'ordre des opérations de maj des profils et des droits
  18. /**
  19. * Au moment où l'on effectue une action organizationProfileStore.setProfile, il faut aller récupérer
  20. * les différentes habilités que l'utilisateur peut effectuer. (Tout cela se passe en SSR)
  21. *
  22. * @see https://pinia.vuejs.org/core-concepts/actions.html#Subscribing-to-actions
  23. */
  24. // const unsubscribe = organizationProfile.$onAction(
  25. // ({
  26. // name, // name of the action
  27. // after, // hook after the action returns or resolves
  28. // }) => {
  29. // after((_) => {
  30. // if (name === 'initiateProfile') {
  31. // // On construit les habilités et on les enregistre dans le store
  32. // // noinspection UnnecessaryLocalVariableJS
  33. // const abilities = abilityUtils.buildAbilities()
  34. // accessProfile.abilities = abilities
  35. //
  36. // // Unsubscribe pour éviter les memory leaks
  37. // unsubscribe()
  38. // }
  39. // })
  40. // },
  41. // )
  42. })