【前端知识】简单易懂的vue前端页面元素权限控制

server/2025/1/23 19:23:36/

文章目录

    • 设计思路
    • 代码实现
      • 1. **权限数据管理**
      • 2. **权限判断方法**
      • 3. **动态控制元素**
      • 4. **路由权限控制**
      • 5. **无权限页面**
    • 总结
    • 相关文献

前端实现基于 Vue 的权限控制,通常需要结合后端返回的用户权限数据,动态控制页面元素的显示与隐藏、按钮的可点击状态等。以下是设计思路和代码实现:

设计思路

  1. 权限数据管理:

    • 从后端获取用户的权限数据(如角色、权限列表等),并存储在 Vuex 或组件的 data 中。
    • 权限数据可以是一个数组或对象,例如:
      {"roles": ["admin", "editor"],"permissions": ["create", "edit", "delete"]
      }
      
  2. 权限判断方法:

    • 封装一个全局方法(如 checkPermission),用于判断用户是否具有某个权限。
    • 该方法可以放在 Vue 的原型上,方便全局调用。
  3. 动态控制元素:

    • 使用 v-ifv-show 控制元素的显示与隐藏。
    • 使用 :disabled 控制按钮的可点击状态。
  4. 路由权限控制:

    • 在路由守卫中检查用户权限,决定是否允许访问某个页面。

代码实现

1. 权限数据管理

假设从后端获取的权限数据如下:

{"roles": ["admin", "editor"],"permissions": ["create", "edit", "delete"]
}

将权限数据存储在 Vuex 中:

javascript">// store/modules/auth.js
export default {state: {roles: [],permissions: []},mutations: {SET_PERMISSIONS(state, permissions) {state.permissions = permissions;},SET_ROLES(state, roles) {state.roles = roles;}},actions: {fetchUserPermissions({ commit }) {// 模拟从后端获取权限数据const permissions = ["create", "edit", "delete"];const roles = ["admin", "editor"];commit("SET_PERMISSIONS", permissions);commit("SET_ROLES", roles);}}
};

2. 权限判断方法

在 Vue 原型上添加一个全局方法 checkPermission

javascript">// main.js
import Vue from 'vue';
import store from './store';Vue.prototype.$checkPermission = function (permission) {const permissions = store.state.auth.permissions;return permissions.includes(permission);
};

3. 动态控制元素

在组件中使用 v-ifv-show 控制元素的显示与隐藏,使用 :disabled 控制按钮的可点击状态。

<template><div><!-- 控制元素的显示与隐藏 --><div v-if="$checkPermission('create')">创建内容</div><!-- 控制按钮的可点击状态 --><button :disabled="!$checkPermission('edit')">编辑</button><!-- 使用 v-show 控制元素的显示与隐藏 --><button v-show="$checkPermission('delete')">删除</button></div>
</template><script>
export default {mounted() {// 获取用户权限数据this.$store.dispatch("auth/fetchUserPermissions");}
};
</script>

4. 路由权限控制

在路由守卫中检查用户权限,决定是否允许访问某个页面。

javascript">// router/index.js
import Vue from 'vue';
import Router from 'vue-router';
import store from './store';Vue.use(Router);const routes = [{path: '/admin',component: () => import('@/views/Admin.vue'),meta: { requiresAuth: true, requiredPermissions: ['admin'] }},{path: '/editor',component: () => import('@/views/Editor.vue'),meta: { requiresAuth: true, requiredPermissions: ['editor'] }}
];const router = new Router({routes
});router.beforeEach((to, from, next) => {const requiresAuth = to.matched.some(record => record.meta.requiresAuth);const requiredPermissions = to.meta.requiredPermissions || [];if (requiresAuth) {const userPermissions = store.state.auth.permissions;const hasPermission = requiredPermissions.every(permission =>userPermissions.includes(permission));if (!hasPermission) {next('/403'); // 无权限时跳转到 403 页面} else {next();}} else {next();}
});export default router;

5. 无权限页面

创建一个无权限页面(如 403.vue),用于提示用户无权限访问。

<template><div><h1>403 无权限访问</h1><p>您没有权限访问此页面。</p></div>
</template>

总结

通过以上设计思路和代码实现,可以实现基于 Vue 的前端权限控制,包括:

  1. 权限数据管理:从后端获取权限数据并存储在 Vuex 中。
  2. 权限判断方法:封装全局方法 checkPermission,用于判断用户是否具有某个权限。
  3. 动态控制元素:使用 v-ifv-show:disabled 控制元素的显示与隐藏、按钮的可点击状态。
  4. 路由权限控制:在路由守卫中检查用户权限,决定是否允许访问某个页面。

这种方法灵活且易于扩展,适用于大多数前端权限控制场景。

相关文献

前端知识】Javascript前端框架Vue入门


http://www.ppmy.cn/server/160829.html

相关文章

随遇随记篇

vue 函数 unref() 获取原始值 ref 定义的属性 需要 .value 才能拿到值&#xff0c;unref 直接返回原始值&#xff1b;若属性不是ref 定义的&#xff0c;也是直接返回原始值&#xff1b; /* description: 是否必填*/required?: boolean | Ref<boolean>.....let value …

【Qt 常用控件】显示类控件——QLabel

目录 1.QLabel 1.1 textFormat 文本类型 普通文本和富文本 Markdown格式 1.2 alignment 文本对齐方式 1.3 wordWrap 自动换行 1.4 indent 文本缩进 1.5 margin 边距 1.6 buddy&#xff0c;qlabel伙伴 1.7 pixmap图片 和 scaledContents自动填充 1.QLabel 功能&#x…

Chrome 132 版本新特性

Chrome 132 版本新特性 一、Chrome 132 版本浏览器更新 1. 在 iOS 上使用 Google Lens 搜索 在 Chrome 132 版本中&#xff0c;开始在所有平台上推出这一功能。 1.1. 更新版本&#xff1a; Chrome 126 在 ChromeOS、Linux、Mac、Windows 上&#xff1a;在 1% 的稳定版用户…

linux CentOS 创建账号,并设置权限

1. 查看用户&#xff1a;cat /etc/passwd 2. 创建用户 sudo useradd username 3. 设置密码 sudo passwd username 4. 限制命令 sudo visudo 文件末尾添加 developer ALL(root) NOPASSWD: /bin/cd, /bin/ls, /usr/bin/cat, /usr/bin/git, /usr/bin/tail

npm、cnpm 、yarn、pnpm的优势点和缺点

他们都是干什么的&#xff1f; npm、cnpm 和 yarn 都是用于管理 JavaScript 项目依赖的工具。 npm (Node Package Manager) 官方性&#xff1a;由 Node.js 官方提供的默认包管理器。性能&#xff1a;在早期版本中&#xff0c;npm 的安装速度较慢&#xff0c;因为它是串行安装…

解决GB28181对接RTSP倍速播放导致FFmpeg缓冲区满导致花屏问题

在GB28181协议对接RTSP流时&#xff0c;倍速播放会导致FFmpeg缓冲区溢出&#xff0c;进而造成花屏问题。这是由于倍速播放增加了数据流的处理速度&#xff0c;而FFmpeg的缓冲区未能及时处理这些增量数据&#xff0c;导致视频帧丢失或渲染错误。为解决此问题&#xff0c;可能需要…

sentinel微服务保护

学习链接 SpringCloudRabbitMQDockerRedis搜索分布式 文章目录 学习链接1.初识Sentinel1.1.雪崩问题及解决方案1.1.1.雪崩问题1.1.2.超时处理1.1.3.仓壁模式1.1.4.断路器1.1.5.限流1.1.6.总结 1.2.服务保护技术对比1.3.Sentinel介绍和安装1.3.1.初识Sentinel官网地址github地址…

Python 电脑定时关机工具

Python 电脑定时关机工具 相关资源文件已经打包成EXE文件&#xff0c;可双击直接运行程序&#xff0c;且文章末尾已附上相关源码&#xff0c;以供大家学习交流&#xff0c;博主主页还有更多Python相关程序案例&#xff0c;秉着开源精神的想法&#xff0c;望大家喜欢&#xff0c…