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) // 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) // TODO: voir si on peut se passer du listener // TODO: clarifier l'ordre des opérations de maj des profils et des droits const unsubscribe = organizationProfile.$onAction(({ name, // name of the action store, // store instance, same as `someStore` args, // array of parameters passed to the action after, // hook after the action returns or resolves onError, // hook if the action throws or rejects }: any) => { after((result: any)=>{ 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() } }) }) })