首页 > 其他分享 >Vue前端权限管理

Vue前端权限管理

时间:2023-06-23 11:00:09浏览次数:45  
标签:Vue name 登录 前端 router 权限 路由 页面

一、登录权限控制

实现哪些页面能被未登录的用户访问,哪些页面只有用户登录后才能被访问

1、实现:

  • 在路由对象中以添加meta的方式去实现登录页面权限控制
  • 需要登录才能显示的页面设置meta.need_login属性    
export const routes = [
      {
         path: '/login', //登录页面
         name: 'Login',
         component: Login,
      },
      {
         path:"/list", // 列表页
         name:"List",
         meta:{
            need_login:true //需要登录
         }
      }
    ]

2、路由守卫拦截

  • 拿到need_login字段,判断是否为需要登录的路由页面,
  • 如若是,则进行下一步登录逻辑判断等,如若不是,则可放行
router.beforeEach((to, from, next) => {
  if (to.meta.need_login) {
    // 业务逻辑判断登录等  
  } else {
    next();
  }
});

二、角色权限控制

解决给不同角色赋予不同权限从而赋予不同账户权限

1、以前端为主导,后端标识角色

export const permission = {
   member:["Home"], //普通成员
   admin:["Home" ,"Notify"],  // 管理员
   super_admin:["Home" ,"Notify","Manage"]  // 超级管理员
 }

2、以后端为主导,前端根据后端的权限返回,展示对应的权限页面和菜单

//后端返回结构
{ "home": { "id":"100", //id为页面或者说模块的唯一标识id "name":"home",//name此处最好与前端路由页面对象的name值相对应 "desc":"首页",//desc为菜单上展示的名称 "value":true,//value代表这个模块或者页面是否展示 "children": [],//children数组为此页面的二级页面数组 } }

三、内容权限控制

比如说控制页面中的某一个元素

后端返回结构:

{
   "home": {
     "id":"100",
     "name":"home",
     "desc":"首页",
     "value":true,
     "children": [],
     "options": {
        "create": true,//创建
        "delete": true,//删除
        "update": true,//更新
     }
   }
 }

拿到数据结构,与页面内容关联,创建全局permission自定义指令

  • 首先拿到指令值,再获取到当前路由名称
  • 通过getOptions方法拿到该路由名称对应的角色权限数据结构中的相关对象
  • 判断options内是否有该内容权限,如若没有,则将该dom移除
import router from '@/router';
import store from '@/store';

app.directive('permission', {
  mounted(el, binding, vnode) {
    const permission = binding.value; // 获取指令值
    const current_page = router.currentRoute.value.name; // 获取当前路由名称
    const options = getOptions(current_page) // getOptions方法为拿到路由名称对应的角色权限对象
    if (!options[permission]) {
      el.parentElement.removeChild(el); // 没有该内容权限
    }
  },
});

html中,指令用法:

<template>
    <div>
      <button v-permission="'create'">创建</button>  
   <button v-permission="'update'">修改</button>
      <button v-permission="'delete'">删除</button>
    </div>
</template>

四、退出及切换用户

当用户退出后,初始化相关路由实例

import Router from 'vue-router';
import router from '@/router';
import store from '@/store/index.js';
import invisible from '@/router/invisible';

export const resetRouter = () => {
  let newRouter = new Router({
    routes: [...invisible],
  });
  router.matcher = newRouter.matcher;
  store.commit('CLEAR_ROLE_AUTH');
};

 

参考地址:前端如何根据不同用户做权限控制? - 掘金 (juejin.cn)

 

标签:Vue,name,登录,前端,router,权限,路由,页面
From: https://www.cnblogs.com/le-cheng/p/17498850.html

相关文章

  • 超级详细的Vue安装与配置教程
    超级详细的Vue安装与配置教程目录一、下载和安装Vue二、创建全局安装目录和缓存日志目录三、配置环境变量1.环境变量---用户变量---选中Path---点编辑2.环境变量---系统变量---新建三、安装vue1.安装vue.js2.安装webpack模板3.安装脚手架vue-cli......
  • 前端缓存【http缓存 | 浏览器缓存】
    一、前端缓存分类【http缓存|浏览器缓存】1、http缓存分类:强缓存 协商缓存   都是服务端设置HTTPHeader来实现的(1)强缓存不需要发送请求到服务端,直接读取浏览器本地缓存//在Chrome的Network中显示的HTTP状态码是200在Chrome中,强缓存又分为DiskCac......
  • 前端Vue自定义导航栏菜单 定制左侧导航菜单按钮 中部logo图标 右侧导航菜单按钮
    前端Vue自定义导航栏菜单定制左侧导航菜单按钮中部logo图标右侧导航菜单按钮,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13152效果图如下:cc-navHeader使用方法在page.json设置{"path":"pages/index/index","style":{"nav......
  • 前端Vue自定义简单实用轮播图封装组件 快速实现轮播图
    前端Vue自定义简单实用轮播图封装组件快速实现轮播图,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13153效果图如下:cc-mySwiper使用方法<!--自定义轮播图swiperArr:轮播数组 @swiperItemClick:轮播图条目点击--><cc-mySwiper:swi......
  • 前端Vue自定义支付密码输入键盘Keyboard和支付设置输入框Input
    前端Vue自定义支付密码输入键盘Keyboard和支付设置输入框Input,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13166效果图如下:cc-defineKeyboard使用方法<!--ref:唯一ref passwrdType:密码样式paykeyInfo:密码输入监测事件--><cc-def......
  • 前端Vue自定义数字输入框 带加减按钮的数字输入框组件
    前端Vue自定义数字输入框带加减按钮的数字输入框组件,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13163效果图如下:cc-numbox使用方法<!--title:标题 isSetMax:是否设置最大值 maxNum:最大值--><cc-numboxtitle="商品数量(设......
  • 前端Vue自定义简单好用商品分类列表组件 侧边栏商品分类组件
    前端Vue自定义简单好用商品分类列表组件侧边栏商品分类组件 ,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13148效果图如下:cc-defineCateList使用方法<!--data:商品列表数组[{navtitle:标题shop:[]展示列表}]@click:商品条目点击事......
  • 前端怎么使用node-input-validator给接口添加参数校验(以strapi 4.9为例)
    node-input-validator是什么?简称NIV(NodeInputValidator)用于node.js的验证库使用它可以扩展库以添加自定义规则。npmNIV文档使用方法我们以strapi4.9版本项目为例,来试用一下它对我们接口的校验规则下载依赖npminode-input-validator在项目中创建全局中间件......
  • Bootstrap前端开发框架
    一 Bootstrap简介Bootstrap来自Twitter(推特),是目前最受欢迎的前端框架。Bootstrap是基于HTML、CSS和JAVASCRIPT的,它简洁灵活,使得Web开发更加快捷。 中文官网:http://www.bootcss.com/ 官网:http://getbootstrap.com/ 推荐使用:http://bootstrap.css88.com/框架:顾......
  • 获得手机根root权限
    Download:http://developer.android.com/sdk/download.html?v=android-sdk-windows-1.5_r3.ziphttp://rapidshare.de/files/47972320/orange-htc-hero-uk-boot.img-28-july-2009.zip.htmlInstallHTCSyncfromyourHTCdeviceConnectdevicetocomputerusingUS......