权限控制
权限控制分两种,即整个页面具有权限控制,和页面中单个组件需要权限。
1.整个页面访问限制
整个页面的权限控制较为简单,你只需要在路由配置的meta中配置access字段即可,它是一个数组,如果你没有设置access字段,那么该页面是所有用户都可以访问的;如果你设置了该字段,那么只有该字段所设置的数组中包含的权限名称的用户可访问该页面。如下:
{
path: '/page1',
name: 'page1',
component: Main,
meta: {
access: ['super_admin'] /*
* 该页面只有权限值为super_admin的用户才能访问
* 如果这级路由有子路由,则子路由也只有super_admin才能访问
* 如果不设置此字段,则所有用户均可访问
*/
}
}
2.单个组件浏览控制
如果你的一个页面上有多个组件,而不同的组件对于权限的要求又有所不同,那么,你可以使用如下方法给一个组件设置根据权限值配置它的可访问性:
<template>
<div>
<component1 v-if="viewAccessAll"></component1>
<component2 v-if="viewAccessSuper"></component2>
</div>
</template>
<script>
import { hasOneOf } from '@/libs/tools'
export default {
name: 'page',
computed: {
access () {
return this.$store.state.user.access
},
viewAccessAll () {
return hasOneOf(['super_admin', 'admin'], this.access)
},
viewAccessSuper () {
return hasOneOf(['super_admin'], this.access)
}
}
}
</script>
上面的例子中,admin和super_admin权限的用户都可看到component1
组件,而component2
只有super_admin可以看到。