Обновление пользователя в CASL - PullRequest
0 голосов
/ 28 декабря 2018

Я использую очень простую CASL реализацию.К сожалению, документы не настолько подробны.У меня есть следующий код (в основном скопированный из документов).

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

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

, где defineAbilitiesFor определяется как (in ./ability.js)

import { AbilityBuilder } from '@casl/ability'

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

Я знаю, что возможно обновить правила / условия (например, ability.update([])).Но как мне обновить информацию о пользователе после инициализации CASL?(например, после того, как пользователь вошел в систему

1 Ответ

0 голосов
/ 28 декабря 2018

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