zoukankan      html  css  js  c++  java
  • vue + django 的权限控制

    用vue做前端页面, Django 提供api, 写了一个后台系统,结合方式是vue打包后的dist目录直接作为Django的静态目录, 这样的好处是不用配置Nginx
    具体的做法不在这里写了,记一下遇到的问题,比如权限系统

    如果是用Django默认的模板系统,权限系统只需要做一个中间件就行了,在请求到达试图函数之前,验证一下,但是如果是用vue, 请求的页面都是vue的路由,然后通过访问api接口来获取数据,这就相当于,你在浏览器输入的地址, 是静态文件的地址,而不是Django的urls中的地址,而Django默认的做法, 访问静态文件是不通过中间件的,可以看一下这里

    还好,vue的router自带钩子函数beforeEach,可以实现同样的效果
    在Django端专门写一个api用来检查权限,访问vue的地址时,在beforeEach函数中,先发一遍请求,来验证是否有权限,没有的话就拦截住,返回403页面

    beforeEach函数有三个参数,to, from 和 next,  to是即将跳转的路径, from是当前导航正要离开的路经,也就是从哪来, next方法用来结束这个函数

    在main.js中检查权限:

     1 router.beforeEach((to, from, next) => {
     2 
     3     if (to.meta.requireAuth) {
     4       if (store.state.username) {
     5         // 路由拦截,请求服务端,查看该用户是否有访问权限
     7         let url = store.state.path +  "api/check_permission";
     8         let data = JSON.stringify({
     9           username: store.state.username,
    10           url: to.fullPath
    11         });
    12         console.log(this);
    13         console.log(axios);
    14         axios.post(url, data,).then(
    15           function (response) {
    16             console.log("response", response);
    17             let status = response.data.status;
    18             console.log("status:", status)
    19             if (status == false) {
    20               router.push("/console/403")
    21             } else if (status == "relogin") {
    22               next({
    23                 path: '/console/login',
    24                 query: {referrer: to.fullPath}
    25               })
    26             } else {
    27               next();
    28             }
    29           }
    30         )
    31 
    32       } else {
    33         next({
    34           path: '/console/login',
    35           query: {referrer: to.fullPath}
    36         })
    37       }
    38     } else {
    39       next();
    40     }
    41   }
  • 相关阅读:
    xpath 获取表单的值
    更改Linux语言环境
    推送证书p12文件转换成pem的命令
    隐藏响应的server,X-Powered-By
    多维数组自定义排序
    Docker:Windows7下使用docker toolbox(1)
    FluentScheduler:开源轻量级定时任务调度架构
    IdentityServer3:.NET开源OpenID和OAuth2架构
    .NET拾忆:FormData文件上传
    正则表达式:各类数值
  • 原文地址:https://www.cnblogs.com/zhang-can/p/9100238.html
Copyright © 2011-2022 走看看