首页 > 其他分享 >[权限]基于角色的静态模式

[权限]基于角色的静态模式

时间:2023-04-08 18:23:04浏览次数:37  
标签:vue 角色 静态 state token meta role import 权限

绝大多数,用户角色和功能固定时,推荐在这种方式。
开发简单,工作量少,可以快速交付。

1. 登录

当用户登录时,将用户角色写入到vuex,保存当前用户角色信息。

# store/index.js

import {createStore} from 'vuex'

export default createStore({
    state: {
        token: localStorage.getItem('token') || '',
        role: localStorage.getItem('role') || ''
    },
    getters: {},
    mutations: {
        login(state, {token, role}) {
            state.token = token
            state.role = role
            localStorage.setItem('token', token)
            localStorage.setItem('role', role)
        }
    },
    actions: {},
    modules: {}
})
# 登陆
const handleFinish = () => {
  const login_info = {
    token: '123',
    role: formState.role
  }
  store.commit('login', login_info)
  message.info(formState.user + "登陆成功")
  router.replace({name: "admin"})
};

2.定义路由

定义路由时,基于 meta 来指定哪些角色的用户可以访问此路由。

# router/index.js
const routes = [
    {
        path: '/login',
        name: 'login',
        component: () => import('../views/LoginView.vue'),
        meta: {is_menu: false}
    }, {
        path: '/admin',
        name: 'admin',
        component: () => import('../views/AdminView.vue'),
        meta: {is_menu: false},
        children:
            [
                {
                    path: 'user',
                    name: 'user',
                    component: () => import('../views/admin/UserView.vue'),
                    meta: {role: ['user'], is_menu: true, title: 'user'}
                },
                {
                    path: 'user2',
                    name: 'user2',
                    component: () => import('../views/admin/User2View.vue'),
                    meta: {role: ['admin'], is_menu: true, title: 'user2'}

                },
                {
                    path: 'all',
                    name: 'all',
                    component: () => import('../views/admin/AllView.vue'),
                    meta: {role: ['admin','user'], is_menu: true, title: 'all'}

                }]
    }]

3.路由导航守卫

用户访问页面时,在导航守卫中,进行判断,是否有权访问此路由。

  • 有权,继续访问
  • 无权,跳转登录页面
outer.beforeEach((to, from, next) => {
    let roles = to.meta.role
    if (roles) {
        console.log(store.state.role)
        // 在roles里找权限store.state.role,找不到返回-1
        if (roles.indexOf(store.state.role) != -1) {
            next()
        } else {
            next({name: "login"})
        }
    } else {
        next()
    }
})

4.菜单的加载

根据vuex中的角色,加载自己的路由,并添加在菜单中。

<template>
  <a-layout>
    <a-layout-sider :style="{ overflow: 'auto', height: '100vh', position: 'fixed', left: 0 }">
      <div class="logo"/>
      <a-menu theme="dark" mode="inline" v-model:selectedKeys="selectedKeys">
        <a-menu-item :key="item" v-for="item in routerlist">
          <user-outlined/>
          <router-link :to="{name:item.name}">{{ item.meta.title }}</router-link>
        </a-menu-item>
      </a-menu>
    </a-layout-sider>
    <a-layout :style="{ marginLeft: '200px' }">
      <a-layout-header :style="{ background: '#fff', padding: 0 }"/>
      <a-layout-content :style="{ margin: '24px 16px 0', overflow: 'initial' }">
        <div :style="{ padding: '24px', background: '#fff', textAlign: 'center' }">
          <router-view/>
        </div>
      </a-layout-content>
    </a-layout>
  </a-layout>
</template>
<script setup>
import {
  UserOutlined,
  // VideoCameraOutlined,
} from '@ant-design/icons-vue';
import {computed, ref} from 'vue';
import {useRouter} from "vue-router";
import {useStore} from "vuex";

const router = useRouter()
const store = useStore()
const selectedKeys = ref(['1'])
const routerlist = computed(
    () => {
      return router.getRoutes().filter(item => {
        if (item.meta.is_menu && item.meta.role.indexOf(store.state.role) != -1) {
          return true
        }
      })
    }
)
</script>

标签:vue,角色,静态,state,token,meta,role,import,权限
From: https://www.cnblogs.com/sherwin1995/p/17298952.html

相关文章

  • windows下无法访问静态图片,报错java.net.UnknownHostException
    如果你是这种方式映射静态文件的,那可以继续看下去了@Value("${prop.me.hddir}")privateStringhddir;privatevoidaddstatic(ResourceHandlerRegistryregistry){Stringdir=hddir+"/static/";log.info("启动加资源路径...addResourceHa......
  • vmware虚拟机设置静态ip
    操作系统   centos7网络模式 nat操作步骤 1.设置宿主机的vmnet8的ipv4地址,此地址就是虚拟机的网关  2.查看虚拟机的网卡信息      3. 对虚拟机的网络进行设置 vim/etc/sysconfig/network-scripts/ifcfg-eno16777736,内容如下BOOTPROTO=staticO......
  • 0002 嵌入式开发带你从小白到大佬系列之——Linux文件系统、常用文件操作命令(一)及用户
    1、熟悉Linux的文件系统结构Linux的文件系统结构其实是一个树形的分层组织结构,如下图:Linux系统目录结构及目录路径:1.1、文件系统层次结构标准Linux是开源的操作系统,各个Linux发行机构都可以按照自己的需求对Linux系统的文件系统进行相应的裁剪,所以各个Linux发行版本的目录结......
  • 静态路由配置实例
    网络拓扑1、网关PC会把不知道去往哪里的数据包交给网关PC的IP地址和网关地址,必须在同一网络,PC必须要可以访问到网关2、静态路由的基本配置#配置静态路由[R2]iproute-static192.168.1.02412.1.1.1#删除静态路由[R2]undoiproute-static192.168.1.02412.1.1.1默认路由的基......
  • Aws上如何设置受限权限的账号
    近期,老板安排了一个要求,希望给新来的员工一个IAM用户,拥有除了修改其他用户信息之外,可以访问其他一切资源。同时,要求这个用户可以自己修改密码。PowerUserAccess经过查询官方资料,发现PowerUserAccess符合这个要求,貌似管理员之外的所有权限都满足。https://docs.aws.amazon.com/zh_cn......
  • DC静态时序分析之时钟篇
    DC静态时序分析之时钟篇博主微信:flm13724054952,不懂的有疑惑的也可以加微信咨询,欢迎大家前来投稿,谢谢!引言介绍在芯片设计或者FPGA设计里面,根据有无时钟,将电路设计分为时序逻辑电路设计跟组合逻辑电路设计两部分。对设计的电路进行时序分析来说,时钟是不可或缺的。本文主要介绍关于......
  • SpringSecurity实现权限系统设计
    RBAC权限分析RBAC全称为基于角色的权限控制,本段将会从什么是RBAC,模型分类,什么是权限,用户组的使用,实例分析等几个方面阐述RBAC思维导图绘制思维导图如下什么是RBACRBAC全称为用户角色权限控制,通过角色关联用户,角色关联权限,这种方式,间阶的赋予用户的权限,如下图所示对于通常的系统而......
  • 【Spring原理分析-Scope+Spring Boot自定义静态资源映射】
    Spring原理分析-Scope本文纲要:一、Scope1、Scope类型2、基础准备与演示二、Scope失效1、基础准备与演示2、失效原因及处理3、总结下面开始进入正文:一、Scope1、Scope类型singleton,prototype,request,session,application2、基础准备与演示①编写各种Scope的Beanrequest......
  • MindSpore开发静态图调试记录
    主要参考资料:静态图语法支持-MindSporemasterdocumentation定位错误:报错会生成rank_0/om/analyze_fail.dat文件,按instruction定位即可#1.ThisfileshowstheparsedIRinfowhengraphevaluatingfailedtohelpfindtheproblem.#2.Youcansearchthelast`----......
  • java基础——静态代理和动态代理
    java代理模式有静态代理和动态代理两种实现方式一、静态代理代理模式可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强。代理类和被代理类应该共同实现一个接口,或者是共同继承某个类。优点:可以在不修改目标对象的前提下扩展目标对象的功能......