import { Plugin } from '@nuxt/types' import { defineAbility } from '@casl/ability' declare module '@nuxt/types' { interface Context { $ability(): void } } export const ability = defineAbility(can => can('read', 'nothing')) const abilityPlugin: Plugin = (ctx) => { ability.update(ctx.store.state.myProfile.permissions); ctx.store.subscribe((mutation) => { switch (mutation.type) { case 'myProfile/setProfile': const permissions = getPermissionByRoles(ctx.store.state.myProfile.roles) ctx.store.commit('myProfile/setPermissions', permissions) ability.update(permissions); break; } }); const getPermissionByRoles = (roles:[]) =>{ for(const key in roles){ const role = roles[key]; } return [ { action: 'read', subject: 'books' }, { action: 'read', subject: 'book' }, ] } ctx.$ability = () => {return ability} } export default abilityPlugin