权限 | 前端控制权限

简介: 啊,我们经常做权限控制,控制菜单,控制按钮功能等,但是在一些特殊情况下不能够由后端来做权限控制,那就只能前端来做啦。

啊,我们经常做权限控制,控制菜单,控制按钮功能等,但是在一些特殊情况下不能够由后端来做权限控制,那就只能前端来做啦。

🤔初步思路

后端来控制权限,是在新增用户的时候来给用户添加不同的菜单或者按钮级别的权限,这些其实也是和前端约定好的数据,保存在数据库里面,那么前端在自己代码保存一份权限文件,通过对不同用户需求进行打包,不就能够生成对应的系统了吗?

🎍环境变量

  • 新建env文件

假如有两个用户权限为AB,那我们就新建两个env文件,分别为.env.A.env.B,分别在其中写入VITE_MODE=AVITE_MODE=B

  • 设置命令

package.json中设置命令,A:vite --mode AB:vite --mode B

  • 运行命令

运行yarn A或者yarn B

  • 获取环境变量

import.meta.env.MODE 即可获取env文件中的MODE参数,也就是环境变量。

🖥️配置文件

  • 新建premissionConfig文件
// 引入路由菜单文件
import { routerMap } from "@/routers/routerMap";

export interface MenuList {
  name: string;
  icon: string;
  to: string;
  value: string;
  id: string;
}

interface Center {
  actionList: string[];
  menuList: MenuList[];
}

interface Station extends Center {}

interface PremissionConfig {
  center: Center;
  station: Station;
}

export const premissionConfig: PremissionConfig = {
  center: {
    actionList: ["get"],
    // 假设有以下几个菜单
    menuList: [
      {name: "A",to: routerMap.A,id: "A"},
      {name: "B",to: routerMap.B,id: "B"},
      {name: "C",to: routerMap.C,id: "C"},
    ],
  },
  station: {
    actionList: ["post", "delete", "put", "download"],
    menuList: [
      {name: "A",to: routerMap.A,id: "A"},
      {name: "B",to: routerMap.B,id: "B"},
      {name: "C",to: routerMap.C,id: "C"},
      {name: "D",to: routerMap.D,id: "D"},
    ],
  },
};
AI 代码解读
  • 自定义指令,主要是用于控制不同权限的按钮
import { premissionConfig } from "@/utils/premissionConfig";
let usersPermissions: string[] = [];

usersPermissions = premissionConfig[import.meta.env.MODE].actionList;

const permission = {
  mounted(el: any, binding: any, vnode: any) {
    const { value } = binding;
    const exit = usersPermissions.some((v) => {
      return v.indexOf(value) !== -1;
    });
    if (!exit) {
      el.parentNode && el.parentNode.removeChild(el);
    }
  },
};

const directivesList: any = {
  permission, // 挂载
};

const directives = {
  install: function (app: any) {
    Object.keys(directivesList).forEach((key) => {
      app.directive(key, directivesList[key]); // 注册
    });
  },
};
export default directives;
AI 代码解读
  • 注册指令
import { createApp } from "vue";
import App from "./App.vue";
import directives from "@/directives/permission";
const app = createApp(App);
app.use(Directives)
AI 代码解读

❓如何使用

  • 菜单
import { premissionConfig, MenuList } from "@/utils/premissionConfig";
const menuList: Ref<MenuList[]> = ref([]);
menuList.value = premissionConfig[import.meta.env.MODE].menuList;
AI 代码解读
  • 按钮或功能模块(使用v-permission不显示该按钮或功能)
<el-button icon="DeleteFilled" @click="xxx" v-permission="['delete']">删除</el-button>
AI 代码解读

🏢使用场景

  • 特定情况下,用户权限的服务器不在统一地方,需要分开运行。
  • 同一套代码,针对不同客户交付不同功能,减少重复性新开项目。
目录
打赏
0
1
0
0
73
分享
相关文章
|
23天前
|
开箱即用的GO后台管理系统 Kratos Admin - 前端权限
Kratos Admin 是一个开箱即用的 GO 后台管理系统,前端权限管理分为路由和按钮权限。路由权限支持后端动态生成和前端固定配置两种方式,通过 `.env` 文件配置 `VITE_ROUTER_ACCESS_MODE` 实现。按钮权限可通过权限码或角色控制,支持组件、API 和指令三种方式。项目代码托管于 Gitee 和 Github。
24 0
前端全栈之路Deno篇(三):一次性搞懂和学会用Deno 2.0 的权限系统详解和多种权限配置权限声明方式
本文深入解析了 Deno 2.0 的权限系统,涵盖主包和第三方包的权限控制机制,探讨了通过命令行参数、权限 API 和配置文件等多种权限授予方式,并提供了代码示例和运行指导,帮助开发者有效管理权限,提升应用安全性。
123 0
【前端学java】类中的访问权限详解,通俗易懂(5)
【8月更文挑战第9天】类中的访问权限详解,通俗易懂(5)
85 0
前端菜单及按钮权限拦截,实现方案及思路
此实现方案基于vue框架,并需要依赖vue项目相关的库,router、store等等;前端同学要与后端同学协商,常规是让后端返回一个树结构的菜单数据,并且将所有的涉及权限控制的页面path给到后端,如果是按钮,需要把所有的按钮 code 码统一下,这是前期工作,很重要。
前端项目实战捌拾贰react-admin+material ui-踩坑-List的用法之useListContext获取权限
前端项目实战捌拾贰react-admin+material ui-踩坑-List的用法之useListContext获取权限
91 0
前端项目实战捌拾壹react-admin+material ui-踩坑-List的用法之usePermissions获取权限
前端项目实战捌拾壹react-admin+material ui-踩坑-List的用法之usePermissions获取权限
89 0
前端学习笔记202304学习笔记第十七天-vue3.0-导航守卫-结合token控制访问权限
前端学习笔记202304学习笔记第十七天-vue3.0-导航守卫-结合token控制访问权限
91 0
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
378 14

热门文章

最新文章

  • 1
    前端跨域问题解决Access to XMLHttpRequest at xxx from has been blocked by CORS policy
    202
  • 2
    从前端视角聊聊通义灵码使用经验,如何更好地提升研发效率
    7
  • 3
    VSCode AI提效工具,通义灵码前端开发体验
    25
  • 4
    【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
    9
  • 5
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
    3
  • 6
    以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
    10
  • 7
    【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
    10
  • 8
    无前端经验如何快速搭建游戏站:使用 windsurf 从零到上线的详细指南
    5
  • 9
    AI程序员:通义灵码 2.0应用VScode前端开发深度体验
    73
  • 10
    构建高效Java后端与前端交互的定时任务调度系统
    12
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等