import { Plugin } from '@nuxt/types' import { Ability } from '@casl/ability' import { $abilitiesUtils } from "~/services/rights/abilitiesUtils"; declare module '@nuxt/types' { interface Context { $ability(): Ability } } export const ability = new Ability(); const abilityPlugin: Plugin = (ctx) => { ability.update(ctx.store.state.profile.access.abilities); const unsubscribe = ctx.store.subscribeAction({ after: (action, state) => { switch (action.type) { case 'profile/organization/setProfile': const abilitiesUtils = $abilitiesUtils(ctx.store, ability) const abilities = abilitiesUtils.getAbilities(); ctx.store.commit('profile/access/setAbilities', abilities) ability.update(abilities); unsubscribe() break; } } }) ctx.$ability = () => {return ability} } export default abilityPlugin