权限菜单(后端返回数据)

权限菜单

后端准备数据:权限菜单(后端返回数据)_第1张图片

 

Server.js

let express  = require('express');



let app = express();

app.use('*', function (req, res, next) {

    res.header('Access-Control-Allow-Origin', '*');

    //Access-Control-Allow-Headers ,可根据浏览器的F12查看,把对应的粘贴在这里就行

    res.header('Access-Control-Allow-Headers', 'Content-Type');

    res.header('Access-Control-Allow-Methods', '*');

    res.header('Content-Type', 'application/json;charset=utf-8');

    next();

});

app.get('/role',(req,res)=>{

    res.json({

        menuList:[

            {pid:-1,path:'/cart',name:'购物车',id:1,auth:'cart'},

            {pid:1,path:'/cart/cart-list',name:'购物车列表',id:4,auth:'cart-list'},

            // {pid:4,path:'/cart/cart-list/lottery',auth:'lottery',id:5,name:'彩票'},

            {pid:4,path:'/cart/cart-list/product',auth:'product',id:6,name:'商品'},

            //{pid:-1,path:'/shop',name:'商店',id:2,auth:'shop'},

            {pid:-1,path:'/profile',name:'个人中心',id:3,auth:'profile'},

        ],

        buttonAuth:{

            edit:true, // 可编辑

        }

    })

})

app.listen(3000);

 

后端服务跑起来,测试如下:

 

 

权限菜单(后端返回数据)_第2张图片权限菜单(后端返回数据)_第3张图片

把这些菜单对应的页面写出来:

 

 

权限菜单(后端返回数据)_第4张图片权限菜单(后端返回数据)_第5张图片权限菜单(后端返回数据)_第6张图片权限菜单(后端返回数据)_第7张图片权限菜单(后端返回数据)_第8张图片权限菜单(后端返回数据)_第9张图片权限菜单(后端返回数据)_第10张图片权限菜单(后端返回数据)_第11张图片权限菜单(后端返回数据)_第12张图片

 

 

 

 

 

配置路由:

 

权限菜单(后端返回数据)_第13张图片权限菜单(后端返回数据)_第14张图片权限菜单(后端返回数据)_第15张图片

测试:

 

权限菜单(后端返回数据)_第16张图片权限菜单(后端返回数据)_第17张图片权限菜单(后端返回数据)_第18张图片权限菜单(后端返回数据)_第19张图片

 

路由配置完毕,现在后端给我们返回的数据格式如下:

 

权限菜单(后端返回数据)_第20张图片

把上面的数据格式化成我们需要的,保存在vuex中,如下:

 

 

权限菜单(后端返回数据)_第21张图片权限菜单(后端返回数据)_第22张图片

在main.js:

 

权限菜单(后端返回数据)_第23张图片

效果:

 

权限菜单(后端返回数据)_第24张图片

在上面的数据有个auth项,代表有没有这个权限。如果没有这个权限,到时候会把这个菜单从路由规则中删除掉。把所有的auto都过滤出来,如下:

 

 

权限菜单(后端返回数据)_第25张图片权限菜单(后端返回数据)_第26张图片权限菜单(后端返回数据)_第27张图片

测试:

 

权限菜单(后端返回数据)_第28张图片

如果后端数据变了,如下:

 

权限菜单(后端返回数据)_第29张图片

效果:

 

权限菜单(后端返回数据)_第30张图片

把菜单渲染出来,使用element-ui:

 

权限菜单(后端返回数据)_第31张图片

 

 

在Home中使用,如下:

权限菜单(后端返回数据)_第32张图片

 

代码:





选项1-1

选项1-1-1

选项1-1-2





导航二

导航三

导航四





 

效果:

 

权限菜单(后端返回数据)_第33张图片

点击时跳转:

 

 

权限菜单(后端返回数据)_第34张图片权限菜单(后端返回数据)_第35张图片

 

 

把我们刚才得到的数据渲染到上面:

 

 

 

权限菜单(后端返回数据)_第36张图片权限菜单(后端返回数据)_第37张图片

渲染的时候,我们发现,这个时候我们需要使用到递归组件,如下:

 

权限菜单(后端返回数据)_第38张图片权限菜单(后端返回数据)_第39张图片

在Home中使用这个组件:

 

权限菜单(后端返回数据)_第40张图片权限菜单(后端返回数据)_第41张图片

效果:

 

权限菜单(后端返回数据)_第42张图片

但是如果后端没有给我们返回profile,也是拦不住的,如下:

 

权限菜单(后端返回数据)_第43张图片

 

 

如何解决?

答:根据权限动态添加路由 (我们的路由要分成两部分 一部分是有权限 另一部分是没权限的)

 

 

 

 

权限菜单(后端返回数据)_第44张图片权限菜单(后端返回数据)_第45张图片权限菜单(后端返回数据)_第46张图片权限菜单(后端返回数据)_第47张图片权限菜单(后端返回数据)_第48张图片权限菜单(后端返回数据)_第49张图片权限菜单(后端返回数据)_第50张图片

 

测试:

 

 

权限菜单(后端返回数据)_第51张图片

 

再次测试:

权限菜单(后端返回数据)_第52张图片

 

效果:

 

权限菜单(后端返回数据)_第53张图片

两种路由方案:

  • meta:是可以看到菜单,点击后校验权限
  • 后台返回:如果没有权限,根本看不到

 

后端也可以返回是否有这个编辑按钮:

 

 

权限菜单(后端返回数据)_第54张图片权限菜单(后端返回数据)_第55张图片权限菜单(后端返回数据)_第56张图片权限菜单(后端返回数据)_第57张图片

你可能感兴趣的:(vue高级)