将 casl 用于基于角色的权限时出错
error in using casl for role based permission
这就是我使用 casl
定义能力的方式
ability.js
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
注册了
import { abilitiesPlugin } from '@casl/vue';
import ability from './config/ability';
Vue.use(abilitiesPlugin, ability);
现在我想在组件中使用它:
<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"
。我已经使用很少的在线资源实现了这一点。所以错误说罐头没有定义。
您 return 来自 config/ability
的函数,但 Vue.use
期望收到一个 Ability
实例。
错误表明,某些东西试图访问 t
上的 on
属性,其中 t
是来自 [=] 的 abilitiesPlugin
函数的参数17=].
因此,将 Vue.use(abilitiesPlugin, ability);
行替换为 main.js 中的 Vue.use(abilitiesPlugin, ability());
。这应该可以修复错误。
P.S.:确保使用最新版本。 AbilityBuilder.define
已从 CASL v4
中删除
这就是我使用 casl
定义能力的方式ability.js
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
注册了import { abilitiesPlugin } from '@casl/vue';
import ability from './config/ability';
Vue.use(abilitiesPlugin, ability);
现在我想在组件中使用它:
<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"
。我已经使用很少的在线资源实现了这一点。所以错误说罐头没有定义。
您 return 来自 config/ability
的函数,但 Vue.use
期望收到一个 Ability
实例。
错误表明,某些东西试图访问 t
上的 on
属性,其中 t
是来自 [=] 的 abilitiesPlugin
函数的参数17=].
因此,将 Vue.use(abilitiesPlugin, ability);
行替换为 main.js 中的 Vue.use(abilitiesPlugin, ability());
。这应该可以修复错误。
P.S.:确保使用最新版本。 AbilityBuilder.define
已从 CASL v4