| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- import { createMongoAbility } from '@casl/ability'
- import AbilityBuilder from '~/services/rights/abilityBuilder'
- import { useAccessProfileStore } from '~/stores/accessProfile'
- import { useOrganizationProfileStore } from '~/stores/organizationProfile'
- export const ability = createMongoAbility()
- export default defineNuxtPlugin(() => {
- const accessProfile = useAccessProfileStore()
- const organizationProfile = useOrganizationProfileStore()
- // Initialisation, nécessaire pour que l'update des habilités soit correcte après la phase SSR
- ability.update(accessProfile.abilities)
- const abilityUtils = new AbilityBuilder(
- ability,
- accessProfile,
- organizationProfile,
- )
- // TODO: voir si on peut se passer du listener
- // TODO: clarifier l'ordre des opérations de maj des profils et des droits
- /**
- * Au moment où l'on effectue une action organizationProfileStore.setProfile, il faut aller récupérer
- * les différentes habilités que l'utilisateur peut effectuer. (Tout cela se passe en SSR)
- *
- * @see https://pinia.vuejs.org/core-concepts/actions.html#Subscribing-to-actions
- */
- // const unsubscribe = organizationProfile.$onAction(
- // ({
- // name, // name of the action
- // after, // hook after the action returns or resolves
- // }) => {
- // after((_) => {
- // if (name === 'initiateProfile') {
- // // On construit les habilités et on les enregistre dans le store
- // // noinspection UnnecessaryLocalVariableJS
- // const abilities = abilityUtils.buildAbilities()
- // accessProfile.abilities = abilities
- //
- // // Unsubscribe pour éviter les memory leaks
- // unsubscribe()
- // }
- // })
- // },
- // )
- })
|