Как инициализировать правила экземпляра способности при запуске приложения? - PullRequest
2 голосов
/ 02 ноября 2019

Я пытаюсь реализовать CASL с vuex и Nuxt. У меня возникает проблема при попытке инициализировать правила способности, когда мое приложение запускается, и я уже вошел в систему.

По сути, я хотел бы получить правила и обновить экземпляр Ability при запуске приложения. Однако, когда я пытаюсь получить правила из магазина, он возвращает null. На данный момент мне нужно выйти и войти, чтобы получить правила.

store /ility.js

import ability from '../config/ability'

export const updateAbilities = store => {
  ability.update(store['users/getRules']) // this does not work and returns null
  return store.subscribe(mutation => {
    if (mutation.type === 'users/setRules') {
      ability.update(mutation.payload)
    }
  })
}

config /ability.js

import { Ability } from '@casl/ability'

export default new Ability()

store / index.js

import { updateAbilities } from './ability'

export const plugins = [updateAbilities]

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 10 ноября 2019

В итоге я получил правило из локального хранилища, и оно работает.

import ability from '../config/ability'

export const updateAbilities = store => {
  const vuexData = JSON.parse(localStorage.getItem('vuex'))
  const rules = vuexData.users.rules

  ability.update(rules)
  return store.subscribe(mutation => {
    if (mutation.type === 'users/setRules') {
      ability.update(mutation.payload)
    }
  })
}
...