vue-router如何根据不同的用户给不同的权限

闲聊:

小颖去年在上家公司用的vue1.0之前在做路由这块用的router.map,但是现在vue2.0里已经不能用了,所以之前解决权限问题的例子,小颖也参考不了呜呜

之前看一个美女写的:elememtui(有关权限的那些事) 小颖也想试试怎么根据不同的用户,给不同的访问菜单权限,昨天下午小颖试了好久,都没弄好,用户刚登陆进去菜单栏是好的,但是当页面一刷新,左侧的菜单就不见了,但当小颖点击了别的地方后,左侧的菜单栏又能出来了,阿西吧擦,昨天折腾了小颖一下午,在下班前还是没弄好,回去因为才搬了家房子乱的得收拾房间,所以也就没带电脑回去,早上来竟然弄好啦弄好啦弄好啦嘻嘻嘻,下面我们就一起来看看小颖写的代码吧嘻嘻

效果图:

项目是基于小颖之前写的那个demo来写的这里小颖就只把重要的代码给大家粘出来,剩下的大家请移驾到:vue2.0+element+node+webpack搭建的一个简单的后台管理界面    来看其他的代码。

更新后的项目目录:

注意:小颖之前没有用到es6,现在小颖引了es6,具体怎么引请看这里:webpack es6支持配置

如果遇到问题:Vue2.0 新手完全填坑攻略—从环境搭建到发布——DT

新建json文件:

permissions.json

{
    "uesername": "admin",
    "password": "123456",
    "menu": [{
        "name": "导航一",
        "path": "/",
        "children": [{
            "path": "/menutab",
            "name": "Tab"
        }]
    }, {
        "name": "导航三",
        "path": "/",
        "children": [{
            "path": "/progress",
            "name": "Progress"
        }, {
            "path": "/form",
            "name": "form"
        }]
    }]
}

menuForm.vue

<template lang="html">
  <div class="menu-form">
    <el-form :model="numberValidateForm" ref="numberValidateForm" label-width="100px" class="demo-ruleForm">
      <el-form-item label="年龄" prop="age"
      :rules="[
      { required: true, message: ‘年龄不能为空‘},
      { type: ‘number‘, message: ‘年龄必须为数字值‘}]">
      <el-input type="age" v-model.number="numberValidateForm.age" auto-complete="off" class="demo-ruleForm-input"></el-input>
    </el-form-item>
  <el-form-item>
    <el-button type="primary" @click="submitForm(‘numberValidateForm‘)">提交</el-button>
    <el-button @click="resetForm(‘numberValidateForm‘)">重置</el-button>
  </el-form-item>
</el-form>
  </div>
</template>

<script>
export default {
    data() {
        return {
            numberValidateForm: {
                age: ‘‘
            }
        };
    },
    methods: {
        submitForm(formName) {
            this.$refs[formName].validate((valid) => {
                if (valid) {
                    alert(‘submit!‘);
                } else {
                    console.log(‘error submit!!‘);
                    return false;
                }
            });
        },
        resetForm(formName) {
            this.$refs[formName].resetFields();
        }
    }
}
</script>

<style lang="css">
.demo-ruleForm-input{
  width: 300px;
}
</style>

progress.vue

<template lang="html">
  <div class="progress-content">
    <el-progress type="circle" :percentage="0"></el-progress>
    <el-progress type="circle" :percentage="25"></el-progress>
    <el-progress type="circle" :percentage="100" status="success"></el-progress>
    <el-progress type="circle" :percentage="50" status="exception"></el-progress>
  </div>
</template>

<script>
export default {
}
</script>
<style lang="css">
</style>

rate.vue

<template lang="html">
  <div class="block">
    <span class="demonstration">区分颜色</span>
    <el-rate v-model="value2" :colors="[‘#99A9BF‘, ‘#F7BA2A‘, ‘#FF9900‘]"></el-rate>
</div>
</template>

<script>
export default {}
</script>

<style lang="css">
</style>

datePicker.vue

<template lang="html">
  <div class="date-picker">
    <div class="block">
      <span class="demonstration">带快捷选项</span>
      <el-date-picker v-model="value2" align="right" type="date" placeholder="选择日期" :picker-options="pickerOptions1">
      </el-date-picker>
    </div>
  </div>
</template>

<script>
export default {
}
</script>

<style lang="css">
</style>

实现路由限制的代码:

1.login.vue中将原来的handleSubmit2方法进行修改,通过ajax访问本地json然后再判断当前用户是谁有什么权限,小颖这里只写了一个admin,其实真是的数据里应该会有很多个用户,然后大家再判断当前登录的用户是谁,然后获取相应的权限,这里小颖就不给大家演示了嘻嘻。

        handleSubmit2(ev) {
            var _this = this;
            _this.$refs.ruleForm2.validate((valid) => {
                if (valid) {
                    _this.logining = true;
                    var loginParams = {
                        username: this.ruleForm2.account,
                        password: this.ruleForm2.checkPass
                    };
                    _this.$http.get(‘/src/data/permissions.json‘).then(response => {
                        // get body data
                        var someData = JSON.parse(response.bodyText);
                        if (loginParams.username == someData.uesername && loginParams.password == someData.password) {
                            _this.logining = false;
                            sessionStorage.setItem(‘user‘, JSON.stringify(loginParams));
                            sessionStorage.setItem(‘menu‘, JSON.stringify(someData.menu));
                            _this.$router.push({
                                path: someData.menu[0].children[0].path
                            });
                        } else {
                            _this.logining = false;
                            _this.$alert(‘用户名或密码错误!‘, ‘提示信息‘, {
                                confirmButtonText: ‘确定‘
                            });
                        }
                    }, response => {
                        // error callback
                    });
                } else {
                    console.log(‘error submit!!‘);
                    return false;
                }
            });
        }

2.home.vue中的mounted()方法更新为:

    mounted() {
        var user = sessionStorage.getItem(‘user‘);
        if (user) {
            user = JSON.parse(user);
            this.sysUserName = user.username || ‘‘;
        }
        var _this = this;
        _this.menuData = JSON.parse(sessionStorage.getItem("menu"));
        _this.$router.options.routes.forEach(function(item) {
            _this.menuData.forEach(function(menu) {
                if (item.name == menu.name) {
                    item.hidden = false;
                    if (menu.children && item.children) {
                        item.children.forEach(function(children1) {
                            menu.children.forEach(function(children2) {
                                if (children1.name == children2.name) {
                                    children1.hidden = false;
                                }
                            });
                        });
                    }
                }
            });
        });
    }
时间: 2024-08-06 02:14:28

vue-router如何根据不同的用户给不同的权限的相关文章

Vue.js路由管理器 Vue Router

起步 HTML <script src="https://unpkg.com/vue/dist/vue.js"></script> <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script> <div id="app"> <h1>Hello App!</h1> <p>

vue router 参数获取

vue router 参数获取通常是通过$route.query和$route.params方法这里将这两种方式通过代码展示出来: 路由代码: import Vue from 'vue' import Router from 'vue-router' import Home from './views/Home.vue' import UserAdd from './components/UserAdd' import UserList from './components/UserList'

Vue Router 路由守卫:完整的导航解析流程

完整的导航解析流程 1 导航被触发. 2 在失活的组件里调用离开守卫. 3 调用全局的 beforeEach 守卫. 4 在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+). 5 在路由配置里调用 beforeEnter. 6 解析异步路由组件. 7 在被激活的组件里调用 beforeRouteEnter. 8 调用全局的 beforeResolve 守卫 (2.5+). 9 导航被确认. 10 调用全局的 afterEach 钩子. 11 触发 DOM 更新. 12 用

vue router 如何使用params query传参,以及有什么区别

写在前面: 传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题.有需要的朋友可以做一下参考,喜欢的可以点波赞,或者关注一下,希望可以帮到大家. 本文首发于我的个人blog:obkoro1.com Vue router如何传参 params.query是什么? params:/router1/:id ,/router1/123,/router1/789 ,这里的id叫做params query:/route

一、Vue Router 的使用

什么是路由 路由是根据不同的url地址展示不同的内容或页面.可分为前端路由和后端路由. 后端路由:通过用户请求的url导航到具体的html页面:每跳转到不同的URL,都是重新访问服务端,然后服务端返回页面,页面也可以是服务端获取数据和模版组合,返回HTML,也可以是直接返回模版HTML,然后由前端再去请求数据,使用前端模版和数据进行组合,生成想要的HTML.(意味着,浏览器刷新页面.网速慢的话说不定屏幕全白再有新内容) 简单来说路由就是用来跟后端服务器进行交互的一种方式,通过不同的路径,来请求不

vue router 导入方式

vue router 的路由导入方式可用以下两种: 一:直接导入 import Hello from '@/components/Hello' @是在webpack.base.conf.js 配置: resolve: { extensions: ['.js', '.vue', '.json'], alias: { 'vue$': 'vue/dist/vue.esm.js', '@': resolve('src') } } 二 :路由懒加载方式 当打包构建应用时,Javascript包会变得非常大

requirejs vue vue router简单框架

index.html 入口页面 <!DOCTYPE html> <html> <head lang="en">     <meta charset="UTF-8">     <title>vue</title>     <link href="../css/index.css" rel="stylesheet">     <script 

Vue 随笔1-加入vue router 后发现app被渲染了2次

原因:main中已经render了app,在route中不需要再加入app组件了,直接重定向到home即可 main.js import Vue from 'vue' import App from './App.vue' import VueRouter from 'vue-router' import routes from './router/router' Vue.config.productionTip = false Vue.use(VueRouter) const router =

Vue系列:Vue Router 路由梳理

Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌.包含的功能有: 嵌套的路由/视图表 模块化的.基于组件的路由配置 路由参数.查询.通配符 基于 Vue.js 过渡系统的视图过渡效果 细粒度的导航控制 带有自动激活的 CSS class 的链接 HTML5 历史模式或 hash 模式,在 IE9 中自动降级 自定义的滚动条行为 1.动态路由 动态路由,可以将某种模式匹配到的所有路由,并全都映射到同个组件. (通俗点,比如根

Vue Router 使用方法

安装 #直接下载 / CDN https://unpkg.com/vue-router/dist/vue-router.js Unpkg.com 提供了基于 NPM 的 CDN 链接.上面的链接会一直指向在 NPM 发布的最新版本. 你也可以像 https://unpkg.com/[email protected]/dist/vue-router.js 这样指定 版本号 或者 Tag. 在 Vue 后面加载 vue-router,它会自动安装的: <script src="/path/to