ability.ts 943 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { Plugin } from '@nuxt/types'
  2. import { defineAbility } from '@casl/ability'
  3. declare module '@nuxt/types' {
  4. interface Context {
  5. $ability(): void
  6. }
  7. }
  8. export const ability = defineAbility(can => can('read', 'nothing'))
  9. const abilityPlugin: Plugin = (ctx) => {
  10. ability.update(ctx.store.state.myProfile.permissions);
  11. ctx.store.subscribe((mutation) => {
  12. switch (mutation.type) {
  13. case 'myProfile/setProfile':
  14. const permissions = getPermissionByRoles(ctx.store.state.myProfile.roles)
  15. ctx.store.commit('myProfile/setPermissions', permissions)
  16. ability.update(permissions);
  17. break;
  18. }
  19. });
  20. const getPermissionByRoles = (roles:[]) =>{
  21. for(const key in roles){
  22. const role = roles[key];
  23. }
  24. return [
  25. { action: 'read', subject: 'books' },
  26. { action: 'read', subject: 'book' },
  27. ]
  28. }
  29. ctx.$ability = () => {return ability}
  30. }
  31. export default abilityPlugin