Client side authorization when retrieving from server
Bearing in mind that it is a ecmascript-8 feature, instead of waiting for the promise to be fulfilled with a callback:

axios.get(this.route('authorize', params))
   .then(res =&gt; {
     Vue.set(this.userAuthorizations, key, res.data.allowed)
   })
   .catch(err =&gt; this.showError(err.message))


the code could wait until the response is retrieved using await:
async can (ability, model = null, id = null) {
  const key = `${ability}_${model}_${id}`
  const params = {
    ability, model, id
  }

  const response = await axios.get(this.route('authorize', params))
    .catch(err =&gt; this.showError(err.message))

  Vue.set(this.userAuthorizations, key, res.data.allowed)
  return res.data.allowed
}  

Note that can() needs to be declared as async in order for await to be permitted inside of it.