应用启动时如何初始化能力实例规则?
How to initialize the ability instance rules when the application starts?
我正在尝试使用 vuex 和 Nuxt 实现 CASL。当我的应用程序启动并且我已经登录时,我在尝试初始化能力规则时遇到问题。
基本上,我想在应用程序启动时获取规则并更新 Ability 实例。但是,当我尝试从商店获取规则时,它 returns 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]
感谢您的帮助。
我最终从本地存储中获取了规则并且它起作用了。
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)
}
})
}
我正在尝试使用 vuex 和 Nuxt 实现 CASL。当我的应用程序启动并且我已经登录时,我在尝试初始化能力规则时遇到问题。
基本上,我想在应用程序启动时获取规则并更新 Ability 实例。但是,当我尝试从商店获取规则时,它 returns 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]
感谢您的帮助。
我最终从本地存储中获取了规则并且它起作用了。
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)
}
})
}