ability.ts 896 B

1234567891011121314151617181920212223242526272829303132
  1. import { Plugin } from '@nuxt/types'
  2. import { Ability } from '@casl/ability'
  3. import { $abilitiesUtils } from "~/services/rights/abilitiesUtils";
  4. declare module '@nuxt/types' {
  5. interface Context {
  6. $ability(): Ability
  7. }
  8. }
  9. export const ability = new Ability();
  10. const abilityPlugin: Plugin = (ctx) => {
  11. ability.update(ctx.store.state.profile.access.abilities);
  12. const unsubscribe = ctx.store.subscribeAction({
  13. after: (action, state) => {
  14. switch (action.type) {
  15. case 'profile/organization/setProfile':
  16. const abilitiesUtils = $abilitiesUtils(ctx.store, ability)
  17. const abilities = abilitiesUtils.getAbilities();
  18. ctx.store.commit('profile/access/setAbilities', abilities)
  19. ability.update(abilities);
  20. unsubscribe()
  21. break;
  22. }
  23. }
  24. })
  25. ctx.$ability = () => {return ability}
  26. }
  27. export default abilityPlugin