前端权限控制代码

server/2024/11/14 6:51:44/

使用场景:

前端页面根据权限码,对页面模块、组件的显示控制。支持场景:

  1. 在js代码里,进行同步、异步权限判断、拦截登操作;
  2. 在templete里通过v-if指令,控制组件、元素的显示;

API说明:

  // 从服务端获取权限数据

  getAuthData:  () => void;

  // 【同步】检查是否具备权限函数

  checkHasAuth: (auth: AuthKey, data?: AuthRecords) => boolean;

  // 【异步】检查是否具备权限函数(会等待权限数据,适合在js同步代码里做权限判断、拦截)

  asyncCheckHasAuth: (auth: AuthKey, data?: AuthRecords) => Promise<boolean>;

  // 【computed函数计算】是否具备权限

  computedHasAuth: ComputedRef<(auth: AuthKey, data?: AuthRecords) => boolean>;

  // 设置权限数据

  setAuthData: (authData: AuthRecords) => void;

  // 清除权限数据

  clearAuthData: () => void;

完整代码:

javascript">import { watch, ref, type Ref, type ComputedRef } from "vue";type AuthRecords = string[] | undefined;
type AuthKey = string | string[];
interface Auth {// 从服务端获取权限数据getAuthData:  () => void;// 【同步】检查是否具备权限函数checkHasAuth: (auth: AuthKey, data?: AuthRecords) => boolean;// 【异步】检查是否具备权限函数(会等待权限数据,适合在js同步代码里做权限判断、拦截)asyncCheckHasAuth: (auth: AuthKey, data?: AuthRecords) => Promise<boolean>;// 【computed函数计算】是否具备权限computedHasAuth: ComputedRef<(auth: AuthKey, data?: AuthRecords) => boolean>;// 设置权限数据setAuthData: (authData: AuthRecords) => void;// 清除权限数据clearAuthData: () => void;
}function useAuth() {// 权限记录表const authData: Ref<AuthRecords> = ref<AuthRecords>();/*** 获取权限数据*/async function getAuthData() {// reset datasetAuthData(undefined);// TODO// const data = await ****// authData.value = data;}/*** 同步检查是否具备权限函数* @param auth * @returns boolean*/function checkHasAuth(auth: AuthKey, data?: AuthRecords) {const authdata = data || authData.value;// 权限数据未赋值时,都视为没有权限if (authdata === undefined || authData === null) return false;if (typeof auth === 'string') return authdata?.includes(auth)if (Array.isArray(auth)){for(const key of auth) {if (!authdata?.includes(key)) return false;}}return true;}/*** 异步检查是否具备权限函数(会等待权限数据,适合在js同步代码里做权限判断、拦截)* @param auth * @returns boolean*/function asyncCheckHasAuth(auth: AuthKey, data?: AuthRecords): Promise<boolean> {if (authData.value) {return Promise.resolve(checkHasAuth(auth, data));}return new Promise((reslove) => {const stopWatch = watch(authData, (value: any) => {if (value){reslove(checkHasAuth(auth, data))stopWatch();}}, {immediate: true,deep: true})})}/*** 计算是否具备权限* @param auth * @returns */const computedHasAuth = computed(() => (auth: AuthKey) => checkHasAuth(auth, authData.value));/*** 设置同步权限数据* @param authData */function setAuthData(data: AuthRecords) {authData.value = data;}/*** 清除权限数据*/function clearAuthData(){authData.value = []}return {checkHasAuth,asyncCheckHasAuth,computedHasAuth,setAuthData,clearAuthData,getAuthData}
}

案例:

在js里同步、异步判断:
javascript">....
// 同步判断
const hasAuth = checkHasAuth('string'); 
........
// 异步判断
const hasAuth = await asyncCheckHasAuth('string'); 
....
多种权限组合判断:
javascript">....
const hasAuth = checkHasAuth(['abc', 'bcd']);
....
在templete里:
javascript"><templete>....<div v-if="computedHasAuth('string')">........</div>....
</templete>


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

相关文章

RHCE-第四章:ssh远程连接服务器

一、SSH介绍 SSH&#xff08;Secure Shell Protocol&#xff0c;安全的壳程序协议&#xff09;它可以通过数据包加密技术将等待传输的数据包加密后再传输到网络上。ssh协议本身提供两个服务器功能&#xff1a;一个是类似telnet的远程连接使用shell的服务器&#xff1b;另一个就…

[CKS] CIS基准测试,修复kubelet和etcd不安全项

目前的所有题目为2024年10月后更新的最新题库&#xff0c;考试的k8s版本为1.31.1 ​ 专栏其他文章: [CKS] Create/Read/Mount a Secret in K8S-CSDN博客[CKS] Audit Log Policy-CSDN博客 -[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客[CKS] K8S NetworkPolicy Set Up-C…

一些npm总结(持续更新...)

react复制npm react-copy-to-clipboard npm地址:https://www.npmjs.com/package/react-copy-to-clipboard 页面开发提效的神器 Code Inspector 点击页面上的 DOM 元素&#xff0c;它能自动打开 IDE 并将光标定位至 DOM 的源代码位置 官网&#xff1a;https://inspector.fe-dev.…

『Django』初识DRF

点赞 + 关注 + 收藏 = 学会了 本文简介 上一讲《『Django』初识前后端分离》https://mp.weixin.qq.com/s/kvhX8pePKbrS7z9fncT0mA 介绍了在 Django 中如何给前端写接口。如果有跟着动手做的工友一定会发现,这样写接口实在太麻烦了,还容易出错。显然大家都意识到这个问题,于…

基于Python的膳食健康系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

区块链技术入门:以太坊智能合约详解

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 区块链技术入门&#xff1a;以太坊智能合约详解 区块链技术入门&#xff1a;以太坊智能合约详解 区块链技术入门&#xff1a;以太…

计算机新手练级攻略——如何搜索问题

目录 计算机学生新手练级攻略——如何搜索问题1.明确搜索意图2.使用精确关键词3.使用专业引擎搜索4.利用好技术社区1. Stack Overflow2. GitHub3. IEEE Xplore4. DBLP 5.使用代码搜索工具1. GitHub 代码搜索2. Stack Overflow 代码搜索3. Papers with Code4. IEEE Xplore 6.查阅…

施耐德电气40GB数据失窃,遭黑客勒索

11月6日&#xff0c;施耐德电气&#xff08;Schneider Electric&#xff09;已确认其一个开发平台被入侵&#xff0c;此前有威胁行为者声称从该公司的Jira服务器中窃取了40GB的数据。 攻击者声称窃取40GB敏感数据 施耐德电气内部位于隔离环境的JIRA服务器遭黑客入侵&#xff…