【问题标题】:How to initialize the ability instance rules when the application starts?应用启动时如何初始化能力实例规则?
【发布时间】:2019-11-02 18:12:06
【问题描述】:

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

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

商店/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()

存储/index.js

import { updateAbilities } from './ability'

export const plugins = [updateAbilities]

感谢您的帮助。

【问题讨论】:

    标签: vuejs2 vuex nuxt.js casl


    【解决方案1】:

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

    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)
        }
      })
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多