首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用casl进行基于角色的权限时出错

使用casl进行基于角色的权限时出错
EN

Stack Overflow用户
提问于 2020-07-10 17:26:12
回答 1查看 1.3K关注 0票数 0

这就是我如何使用casl定义能力的方法。

ability.js

代码语言:javascript
复制
import { AbilityBuilder } from '@casl/ability';
//   case 'Administrator':
// localStorage.getItem('role')
export default function() {
 AbilityBuilder.define(can => {
    switch(localStorage.getItem('role')) {
      case 'Admin':
      case 'CEO':
        can(['add', 'read','update', 'delete']);
        break;
     case 'Manager':
        can(['add', 'read','update', 'delete']);
        break;
     case 'Senior':
        can(['add', 'read']);
        break;
     case 'Clerk':
     case 'Administrator':
       can('read');
       break;  
    }
  })
}

我已经在main.js注册了

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

Vue.use(abilitiesPlugin, ability);

现在我想在组件中使用它:

代码语言:javascript
复制
<v-icon
   v-if="$can('delete')"
   small
   class="mr-2"
   @click="editItem(item)"
   >
   edit
</v-icon>

这给了我错误:Error in render: "TypeError: t.on is not a function"。我使用很少的在线资源实现了这一点。因此,错误说明没有定义can。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-11 17:52:15

您可以从config/ability返回一个函数,但是Vue.use希望接收一个Ability实例。

错误表示试图访问t上的t属性,其中t是来自@casl/vueabilitiesPlugin函数的参数。

因此,将Vue.use(abilitiesPlugin, ability);行替换为main.js中的Vue.use(abilitiesPlugin, ability());。这应该可以修复错误。

P.S.:确保使用最新版本。AbilityBuilder.define从CASL v4中删除

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62839427

复制
相关文章

相似问题

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