vue实现列表权限
实现列表权限的基本思路
在Vue中实现列表权限控制通常涉及前端根据用户角色或权限动态渲染列表内容。核心是通过权限判断决定是否展示特定列表项或操作按钮。
权限数据存储
权限数据通常从后端接口获取,存储在Vuex或Pinia中。也可以在登录时一次性获取并保存在本地存储。
// Vuex示例
state: {
permissions: ['read', 'edit', 'delete']
}
自定义权限指令
创建自定义指令v-permission用于元素级权限控制:
Vue.directive('permission', {
inserted(el, binding, vnode) {
const { value } = binding
const permissions = store.state.permissions
if (!permissions.includes(value)) {
el.parentNode && el.parentNode.removeChild(el)
}
}
})
组件内权限判断
在组件中使用计算属性或方法进行权限判断:
computed: {
hasEditPermission() {
return this.$store.state.permissions.includes('edit')
}
}
动态路由权限控制
通过路由守卫实现基于权限的动态路由过滤:
router.beforeEach((to, from, next) => {
const requiredPermissions = to.meta.permissions
const userPermissions = store.state.permissions
if (requiredPermissions && !hasPermission(userPermissions, requiredPermissions)) {
next('/403')
} else {
next()
}
})
列表渲染控制
在列表渲染时结合权限判断:
<template>
<div v-for="item in list" :key="item.id">
{{ item.name }}
<button v-permission="'edit'">编辑</button>
<button v-if="hasDeletePermission">删除</button>
</div>
</template>
权限工具函数
封装通用的权限检查函数:
function checkPermission(requiredPermission) {
const userPermissions = store.state.permissions
return userPermissions.includes(requiredPermission)
}
服务端验证
前端权限控制需配合后端验证。所有敏感操作必须经过服务端权限校验,防止仅靠前端控制导致的安全漏洞。
权限变更处理
处理权限变更时的界面更新,可通过监听权限状态或强制刷新组件实现。

watch: {
'$store.state.permissions'() {
this.$forceUpdate()
}
}






