vue权限控制的想法

基于Vue的addRoutes实现权限控制 前言从今年3月到现在入门前端也已经有两个月了,这两个月在自学的过程中遇到了许多问题也解决了其中一部分,但是现在才开始意识到把学习过程的问题整理到优快云上。最近老师布置了基于Vue的权限控制,网上查阅了许多博客,例如“前端路上":这篇文章提到了Vue2.0以上使用的addRoutes增加动态路由的思路。然而我只是一个小白,尽管文章里贴出了源码,我也只能看的一知半解,所以根据文章中提供的思路自己写了... 阅读详情

前言

最近做到了一个权限控制的功能。在这个功能中看到了这个功能的写法,了解到了这个权限控制的功能,也引发了思考。除了 v-if ,还有没有更好的,更直观的,更全局的写法呢?带着这个问题,我们先来看一下,这个权限数据的来源。

权限来源

获取数据的方法也很简单,就是后台接口请求数据。后端在登录后一次性返回所有的权限数据,然后全局 localStorage 或者 store 存储起来。如果发生了修改就可以及时的通知到全局,在使用获取的时候也方便快捷。代码如下:

import { defineStore } from 'pinia'
// 声明,初始化
const defaultState = {
  permissions: {}, // 权限列表
}

// 设置state,存储
function setData(obj) {
  Object.keys(obj).forEach((key) => {
    state[key] = obj[key]
  })
  // 每次改动更新缓存
  localStorage.setItem(LOCAL_STORAGE_NAME, JSON.stringify(toRaw(state)))
}

// 请求权限码
async function getPermissionList() {
  const res = await ajaxStore.common.getPermissionList()
  if (res.data?.code === '0') {
    const arr = res.data?.data ?? []
    const obj = {}
    arr.forEach((item) => (obj[item.permissionCode] = item.permissionName))
    // 全局存储
    setData({ permissions: obj })
    return state.permissions
  } else {
    return null
  }
}

获取到数据以后,就可以来思考怎么使用这些数据。目前,所知的有3种权限控制方式,下面我们一个一个的来看。

三种方法

1. 函数方式

这是我们最先想到的方法,也是最常用的方法。代码如下:

<template>
  <div>
    <Tabs :data="tabConfigs"></Tabs>
    <NoPower v-if="!(tabConfigs && tabConfigs.length)"></NoPower>
  </div>
</template>
<script setup name="realestateWarning">
// 获取 permissions 数据
import useUser from '@/store/user'
// 获取所有的菜单
import { realestateWarningTabs } from '@/const/menu'
  
const userInfo = useUser()
// 过滤tab权限
const tabConfigs = computed(() => {
  const { permissions } = userInfo ?? {}
  return (
    realestateWarningTabs.filter((item) => {
      item.label = item.text
      return permissions[item.permissionCode]
    }) ?? []
  )
})
</script>

本质就是使用 一个 tabConfigs 来筛选需要显示哪些 tab,其中操作是从全局 store 中获取当前用户的权限码列表,然后判断其中是否存在当前需要的权限码,如果有对应的权限码,就加进来。

2. 组件方式

我们可以单独写一个组件,在组件内部进行权限的控制操作,主要是通过插槽的形式把内部需要展示的组件引入进来,在需要加权限的地方进行组件的引入,组件内部的逻辑和函数方式基本无异。这样就可以统一管理权限了,使用起来也比较方便。代码如下:

<template>
  <div>
    <Permission :value="AAAAAA">
      <AAAAAA/>
    </Permission>
    <Permission :value="BBBBBB">
      <BBBBBB/>
    </Permission>
    <Permission :value="CCCCCC">
      <CCCCCC/>
    </Permission>
  </div>
</template>
<script>
  import { Permission } from './Permission';
</script>
<script>
// 获取 permissions 数据
import useUser from '@/store/user'
// 获取所有的菜单
import { realestateWarningTabs } from '@/const/menu'

export default defineComponent({
  props: {
    value: {
      type: [Number, Array, String],
      default: '',
    },
  },
  setup(props, { slots }) {
		const userInfo = useUser()
  	const { permissions } = userInfo ?? {}
    const { hasPermission } = usePermission();

    function renderAuth() {
      const { value } = props;
      if (!value) {
        return getSlot(slots);
      }
      return permissions[value] ? getSlot(slots) : null;
    }

    return () => {
      return renderAuth();
    };
  },
});
</script>
3. 指令方式

指令方式就是自己写个指令,在需要的组件上使用指令就行了。如下:

引用:

<template>
  <div>
    <AAAAAA v-permission="AAAAAA"/>
    <BBBBBB v-permission="BBBBBB"/>
    <CCCCCC v-permission="CCCCCC"/>
  </div>
</template>

编写指令:

import { createApp, reactive, watchEffect } from "vue"
const codeList = reactive([1, 2, 3])

const hasPermission = (value) => {
    return codeList.includes(value)
}

app.directive("permission", {
    updated(el, binding) {
        let update = () => {
            let valueNotChange = binding.value === binding.oldValue
            let oldHasPermission = hasPermission(binding.oldValue)
            let newHasPermission = hasPermission(binding.value)
            let permissionNotChange = oldHasPermission === newHasPermission
            if (valueNotChange && permissionNotChange) return
            if (newHasPermission) {
                addEl(el)
            } else {
                removeEl(el)
            }
        };
        if (el._watchEffect) {
            update()
        } else {
            el._watchEffect = watchEffect(() => {
                update()
            })
        }
    },
})

在绑定元素挂载后调用,使用 permissions 判断当前用户是否存在通过指令插入的按钮需要的权限码,如果不存在,直接移除绑定的元素。

在实际的开发中也会有其他的控制方式,在各种论坛中也看到了,使用装饰器来做的,其实不管怎么做,都是为了抽离业务逻辑,是我们用起来跟简单为目的。

vue实现路由权限控制 我们后管理项目中经常需要对路由权限进行判定,不同的身份可以访问不同的路由。 实现的大体思路很简单,将路由分为基本路由和用户路由,基本路由所有用户均可访问,用户路由是当前用户能够访问的独有的路由。 我们可以通过router中的addRoutes方法,动态向router中添加路由。 为了解具体实现方法,我们先从实现用户登录功能开始 用户登录实现 其实实现用户登录方法很简单,首先,当我们第一次访问服务器时,获取服务器返回值的token信息,将其储存在本地cookie或者sessionStorage中,当我们再次向 阅读详情

相关推荐

C++实战指南:使用CodeBlocks构建跨平台wxWidgets窗口应用

本文是一份面向C++初学者的实战指南,详细介绍了如何使用CodeBlocks IDE和wxWidgets框架快速构建跨平台的桌面窗口应用。内容涵盖从环境搭建、项目配置到界面设计、事件处理的全流程,重点讲解了如何利用CodeBlocks的开箱即用支持和wxSmith可视化设计器,高效开发具有按钮、菜单、列表等控件的交互式窗口界面程序,帮助读者轻松入门GUI开发。

weixin_29012677的博客 154

vue 指令权限控制

对于页面上的部分功能权限,可以通过指令的方式去控制定义指令格式:

weixin_43294560的博客 805

Android加密开发实战:Spongy Castle集成与国密算法应用指南

在移动应用开发中,数据加密是保障用户隐私和信息安全的基石。其原理基于密码学算法,通过对数据进行编码转换,确保即使数据被截获也无法被未授权方解读。这项技术的核心价值在于为敏感信息提供机密性、完整性和身份验证,广泛应用于用户登录、本地存储、网络通信等场景。对于Android开发者而言,系统自带的加密功能有时无法满足需求,特别是涉及国密算法或更丰富算法套件时。本文聚焦于Spongy Castle这一专为Android定制的加密库,它有效解决了与系统内置Bouncy Castle的兼容性问题,并提供了对SM4等国密

weixin_27722377的博客 309

VUE后台管理系统实现权限管理

不管你是开发一款APP或者是微信小程序等其他的应用程序,都需要搭配一个后台管理系统,那么在后台管理系统中有一个比较重要的模块那就是用户权限管理了,接下来我们来实现这个功能。

m0_67584973的博客 1675

置顶必读(2) |《YOLOv8实战:从入门到深度优化》总目录导航 & 学习路线指南(持续更新中)

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 28万+

基于本机知识库 + 豆包(火山引擎)+ MCP的落地方案

最小 MVP:本地知识库 + Doubao Embedding + 简单检索。工具化:把检索/写入/系统功能通过 MCP 封装。Agent 编排:RAG 流程 + 自检 + 引用输出。这样你就可以快速落地一个基于豆包 + 本机知识库的 MCP Agent。

lpfasd123的博客 1097

vue权限管理解决方案

vue权限管理解决方案

dfc_dfc的博客 1512

coze 怎么读取excel文件,使用循环,数据库完成LLM问答并存储

本文介绍了如何在Coze平台实现"Excel读取+循环处理+LLM问答+数据库存储"的工作流。主要分为三个步骤:1)使用代码节点解析Excel文件为问答对数组;2)通过循环节点遍历问答对,调用LLM节点生成回答;3)利用数据库节点将问答结果存储到Coze内置数据库中。文中提供了代码示例和节点配置说明,并强调了注意事项如Excel格式要求、LLM调用频率控制等。该工作流适用于批量构建知识库问答系统并持久化存储结果。

ZhangJiqun&191cm&85kg 1796

附加 VUE项目权限管理详解

Vue权限控制 在Web系统中, 权限很久以来一直都只是后端程序所控制的.为什么呢? 因为Web系统的本质围绕的是数据, 而和数据库最紧密接触的是后端程序.所以在很长的一段时间内, 权限一直都只是后端程序需要考虑的话题.但是随着前后端分离架构的流行, 越来越多的项目也在前端进行权限控制. 1.权限相关概念 1.1.权限的分类 后端权限 从根本上讲前端仅仅只是视图层的展示, 权限的核心是在于服务器中的数据变化, 所以后端才是权限的关键, 后端权限可以控制某个用户是否能够查询数据, 是否能够修改数据等操

qq_39349116的博客 1872

姿态传感器/陀螺仪之IIS2DLPC 应用驱动程序设计

* 转换为°C单位 (参考温度为25°C,灵敏度为16 LSB/°C) */

corlin6688的博客 220

《八》:玩家位置同步(玩家防碰撞)

在VR大空间体验中,由于玩家佩戴头显设备无法直接观察彼此位置,容易发生碰撞。因此,需要将玩家的实时位置信息绘制在虚拟空间中,实现位置可视化。通过获取头显的位置和旋转角度等数据,可以推算出玩家的移动状态和位置。使用可序列化的玩家结构体,通过UDP将玩家数据发送到服务器,服务器接收并反序列化数据后,同步所有玩家的最新信息至各客户端。客户端根据接收到的数据渲染虚拟人物模型,实现动态位置更新。这一过程涉及数据序列化、反序列化、网络通信和实时渲染等技术,确保玩家在虚拟空间中的位置同步和可视化。

unitygroup的博客 413

过滤器

import Vue from 'vue'; import config from '@/config'; // 类型转换文本 Vue.filter('statusToTextf', (value) => { let o = config.statusMapf.find(item => value === item.value) return o ? o.label...

Cola_6的博客 215

【系统架构设计师】模拟预测试卷十 - 案例分析(完整结构)

本文为系统架构设计师考试模拟试题及参考答案,包含五个专题:质量属性(必答)、信息系统架构设计、嵌入式系统架构设计、云原生架构设计、面向服务架构设计(SOA)。试题一聚焦非功能需求与质量属性映射,如性能、可修改性、一致性等;其余选答题分别涉及分层架构设计(如嵌入式实时控制)、云原生会话管理、服务化治理(如契约设计、熔断策略)等核心架构场景,涵盖战术应用、权衡分析及解决方案设计。参考答案提供关键要点,例如离线借还的冲突解决、服务编排与共享服务的区分、嵌入式硬实时保护的必要性等,适用于备考实战演练。

数据知道的博客 252

1小时开发:用EASYEXCEL快速搭建数据报表原型系统

最近在做一个内部数据报表系统的原型开发,时间紧任务重,需要在1天内完成从零到可演示的版本。经过技术选型,最终用Spring Boot + Vue.js配合EASYEXCEL快速实现了需求,整个过程比预想的顺利很多。对于需要快速验证想法的场景,这种前后端分离的报表系统架构配合EASYEXCEL的高效处理,确实能在极短时间内产出可用原型。- 动态字段的国际化显示:通过维护字段名-显示名的映射表解决。内置的样式、格式转换器等组件开箱即用,省去大量细节处理时间。- 内置的样式处理器避免手动调整单元格样式。

BlackironPanther23的博客 365

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

vue中的权限控制

什么是权限控制 在项目中,尤其是在后台管理系统中,不同人员登陆,看到的页面菜单是不一样的,比如,一个公司的办公系统,老板登陆可以看到所有的页面,而普通员工登录可能无法看到公司业绩,营收情况的页面,比如公司的员工个人资料页面只有人力资源部门有权利看,其他部门的员工是不允许查看公司员工信息数据的。当然了除了页面的权限,还会有一些按钮级别的权限,比如一个下载按钮,有的帐号可以用,有的人不能用,比如学校的系统,一个页面中有一个确认成绩按钮,这个按钮只有老师有权利点击,其他学生登陆是无法点击的。 所以权限控制基本

qq_40096030的博客 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Vue权限控制

中我们可以根据后端返回的数据。

csdssdn的博客 8391

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

vue项目实现权限控制的几种思路

一、前言 部门现在的新系统的前端都是使用vue语言,前端管理系统用的框架都是element提供的vue-element-admin模板框架。只是针对公司业务,做了一些修改。其中权限控制模块用的比较频繁,所以今天就谈谈我们前端的vue项目权限控制是如何实现的。 二、vue项目的权限控制思路 权限控制分为菜单权限控制、按钮权限控制和请求url权限控制三大块。按钮权限控制比较容易,主要采取的方式是从后端返回按钮的权限,然后在前端进行显隐操作。url权限控制,主要是后端代码来控制,前端只需要规范好格式即可。剩下的菜

会一点前端、会一点Java、会一点Python 1万+

Vue项目的前端权限控制

Vue项目的前端权限控制 本文主要介绍在Vue项目中如何进行前端权限控制。 路由权限 路由权限就是用户只能访问到自己有权限访问到的页面,对于无权限的页面可以跳转到404页面或者无权限提示。下面通过两种方式来实现对路由的权限控制。 1.动态生成路由表 第一种方式是动态生成路由表,前端原始的路由表中只保存一些基础的路由,获取权限之后根据用户拥有访问权限的路由信息构建一个路由表并动态添加进路由表中,这样...

Hayden 8546

vue权限控制的实现

权限控制是一种安全机制,用于管理系统中用户对资源或功能的访问权限。通过权限控制,系统可以确保用户只能访问其具有权限的资源或执行其具有权限的操作,从而保障系统的安全性和完整性。例如在人资管理系统中,主页就是单位所有人都可以访问的,而比如财务页面由具有财务专员或者是有权限的的人可以访问的,在此小结一下权限访问。在路由配置文件中定义路由信息,包括路由路径、组件以及需要的权限等信息。views文件夹的Home都是提前写好的vue组件//主页//管理员页面//员工页面routes: [

不被定义的程序媛写的博客儿 2079

Vue3路由权限控制

vue路由控制:vue3 + axios + vue router 4 + pinia

m0_46714106的博客 2525

vue前端按钮权限控制隐藏

vue前端按钮权限控制隐藏权限控制描述如何实现1、储存权限数据2、权限判断方法3、设置vue自定义指令4、最终代码与效果 很多后台管理系统会用到权限管理,菜单权限比较好控制,按钮权限就复杂一些,本文介绍的就是按钮权限如何控制,用的是vue项目。 权限控制描述 前端需要根据后端传来的权限数据控制是否显示新增、编辑、删除(红框所示部分)功能。 菜单管理处设置的新增、删除、编辑权限参数如图红框所示部分...

weixin_44849078的博客 1万+

Vue 路由权限控制:深度理解路由守卫与权限管理

Vue Router 提供了多种路由守卫,使得我们能够在不同阶段控制路由的访问。全局前置守卫:在路由跳转之前执行,适用于所有路由。全局后置守卫:在路由跳转后执行,适用于所有路由。路由独享守卫:在路由配置中进行设置,适用于该路由。组件内守卫:在 Vue 组件内部定义,适用于组件生命周期中的路由跳转。本文深入探讨了 Vue.js 中的前端路由权限控制机制,介绍了 Vue Router 的基本概念以及如何利用路由守卫进行权限控制。

一名热衷于技术的全栈开发者,专注于前端与后端的全面技术探索。在这里,我将分享我在技术领域的学习与成长,助力更多开发者的进步。 2192

vue-权限控制

最近因为失业了,有了挺多时间的,决定写一些有关前端的技术点,希望能对还从事前端开发的人有所帮助,也给自己从事前端画上一个句号吧。vue权限控制方面有前端路由和后端路由,前端路由一般所有的路由信息都是在前端路由文件中,判断不同的用户展示不同的路由信息,后端路由是不同的用户的路由信息都是后端通过接口返回,前端将每个不同登录用户的路由信息添加到路由中,进而实现不同用户不同路由不同菜单不同权限,第一中方式实现相对简单,目前企业大部分vue项目都使用的是第二种方式,所以我这里要对第二种方式进行详细讲解。

m0_53956340的博客 1756

Vue路由权限控制

路由权限控制常用于后台管理系统中,对不同业务人员能够访问的页面进行一个权限的限制。 对于无权限的页面可以跳转404页面或者提示无权限。 方式一:路由元信息(meta) 把所有页面都放在路由表中,只需要在访问的时候判断一下角色权限即可。 vue-router 在构建路由时提供了元信息 meta 配置接口,我们可以在元信息中添加路由对应的权限,然后在路由守卫中检查相关权限,控制其路由跳转。 在 meta 属性里,将能访问该路由的角色添加到 roles 里。用户每次登陆后,将用户的角色返回。然后在访问页面时,.

weixin_44760923的博客 5737

vue如何实现路由权限控制

前言 在实际的开发过程中,我们通常会涉及到权限的问题,不同的用户进来只能看到他对应的菜单权限,页面上的菜单渲染是比较好实现的,这里就不多提,唯一比较难的就是路由的权限控制。 解决思路 目前大概有两种思路可以实现路由的权限控制: 1.通过router.beforeEach() 路由拦截的方式实现。 2.通过vue-router 官方提供的addRoutes()来进行动态路由注入,注意该方法只有vue-router的版本>= 2.2才有效。 我们可以来看这两种方式是如何实现的: 解决方案..

shadow_zed的博客 4807
上一篇: React Native中的measure或者measureInWindow函数在安卓/android上不起作用
下一篇: File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/l
develop_csdn_LGQ
博客等级 码龄10年 21粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值