vuejs2 - 应用启动时如何初始化能力实例规则?
问题描述
我正在尝试使用 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)
}
})
}
配置/能力.js
import { Ability } from '@casl/ability'
export default new Ability()
存储/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)
}
})
}
推荐阅读
- listview - 如何检查 ListView 是否滚动到最后?
- asp.net-core - Iphone safari 浏览器中的 SignalR 连接失败被最小化。如何让它保持连接?或如何在选项卡激活时重新连接
- botframework - microsoft bot 或 luis 是否提供用于跟踪失败交互的接口并让我们将它们映射到正确的意图?
- flutter - 在块图案上打开抽屉
- laravel - Laravel 计划作业在维护模式后未恢复
- wordpress - 联系表格 7 显示已发送消息但未收到电子邮件,尤其是 Google aps 域电子邮件
- django - 在 Django 中实现预定付款的最佳策略是什么
- dart - Flutter 中的多个目标和多个构建配置
- android - 如何在两个自己的应用程序之间发送字符串?
- java - AtomicInteger 如何是线程安全的