如何在应用程序启动时初始化能力实例规则?

问题描述 投票:2回答:1

我正在尝试通过vuex和Nuxt实现CASL。当我的应用程序启动并且我已经登录时,尝试初始化能力规则时遇到问题。

基本上,我想获取规则并在应用启动时更新Ability实例。但是,当我尝试从存储中获取规则时,它将返回null。目前,我需要注销并登录以获取规则。

store / ability.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]

感谢您的帮助。

vuejs2 vuex nuxt.js casl
1个回答
0
投票

我最终从本地存储中获得了规则,并且有效。

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)
    }
  })
}
© www.soinside.com 2019 - 2024. All rights reserved.