首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新CASL中的用户

更新CASL中的用户
EN

Stack Overflow用户
提问于 2018-12-28 12:56:30
回答 1查看 3.7K关注 0票数 5

我正在使用一个非常基本的CASL实现。不幸的是,这些文档没有那么详细。我有以下代码(基本上是从文档中复制粘贴的)。

代码语言:javascript
复制
import { abilitiesPlugin } from '@casl/vue'
import defineAbilitiesFor  from './ability'

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

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

代码语言:javascript
复制
import { AbilityBuilder } from '@casl/ability'

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-28 20:40:32

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

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

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

代码语言:javascript
复制
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
    }) 
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53958961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档