javascript - 在 CASL 中更新用户

标签 javascript vue.js casl

我使用的是非常基本的 CASL执行。不幸的是,文档没有那么详细。我有以下代码(基本上是从文档中复制粘贴的)。

import { abilitiesPlugin } from '@casl/vue'
import defineAbilitiesFor  from './ability'

const ability = defineAbilitiesFor({name: 'guest'})
Vue.use(abilitiesPlugin, ability )

其中 defineAbilitiesFor 定义为(在 ./ability.js 中)

import { AbilityBuilder } from '@casl/ability'

function defineAbilitiesFor(user) {
  return AbilityBuilder.define((can, cannot) => {
     can(['read'], 'foo', { username: user.name})
  })
}

我知道可以更新规则/条件(即 ability.update([]))。但是初始化CASL后如何更新用户信息呢? (例如,在用户登录后

最佳答案

CASL与用户无关。最终它关心的只是用户的权限。所以,登录后你需要更新规则,基本上使用 ability.update(myRules)

在您的登录组件中,在向 API 发出登录请求后(或在您收到有关当前登录用户的信息后),您需要调用 ability.update(defineRulesFor(user))

ability 可以只是一个空的 Ability 实例。例如:

const ability = new Ability([])

function defineRulesFor(user) {
  const { can, rules } = AbilityBuilder.extract()

  can(['read'], 'foo', { username: user.name })

  return rules
}

// Later after login request to API (or after you receive information about currently logged in user)

login() {
  return http.post('/login')
    .then((response) => {
       ability.update(defineRulesFor(response.user))
       // after that Ability instance contains rules for returned user
    }) 
}

关于javascript - 在 CASL 中更新用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53958961/

相关文章:

javascript - 用 mustache 填充外部 .html 文件?

javascript - 在继续之前等待 DOM 元素中的特定文本

javascript - 如何绘制具有两个 y 值的数据点?

jquery - vue.js 'document.getElementById' 速记

javascript - 为什么在 this.$scopedSlots 中也可以使用 Vue 常规插槽?

javascript - 函数参数在循环内不起作用

vue.js - CASL 在 Vue 生产模式下无法正常工作

node.js - CASL能力科目助手有条件

javascript - 尝试将更改作为一个整体保存为包含自定义对象的数组内的数组