Project(8)-重新设计权限

基于之前踩过了坑,所以重新进行权限设计,不过在这个过程中,看到一个文档,发现一个可以优化的地方,我写接口没做请求约束,所以加了一个请求约束单接口调用限制:60次/20秒;

let list = [];
let key = -1; 
let timer = setInterval(function(){list = [];key=-1},20000)

app.use(async (ctx, next) => {
    let url = ctx.request.url
    list.forEach((item,index)=>{if(item.name === url){ key=index }})
    if(!~key){
        list.push({name:ctx.request.url,count:1});
        if( url === '/login'){
            await next()
        }else{
            let token = ctx.request.header.token||[]
            let user = await tools.search(User,{token},"all")
            if(user.length){
                await next()
            }else{
                ctx.body = {
                    "retCode": false,
                    "resultMsg": '登录已失效请重新登录',
                    "errorCode": 3
                }
            }
        }
    }else{
        if(list[key].count>=20){
            ctx.body = {
                "retCode": false,
                "resultMsg": '请求人数过多请稍后重试',
                "errorCode": 4
            }
        }else{
            list[key].count++
            if( url === '/login'){
                await next()
            }else{
                let token = ctx.request.header.token||[]
                let user = await tools.search(User,{token},"all")
                if(user.length){
                        await next()
                }else{
                    ctx.body = {
                        "retCode": false,
                        "resultMsg": '登录已失效请重新登录',
                        "errorCode": 3
                    }
                }
            }
        }
    }
})

复制代码

权限设计思路

数据库部分

user用户表

自定义

branch角色表

  • 给五个字段,例如:first,second,third,fourth,fifth

这五个字段分别对应5个级别,first是最高级fifth就是角色(最低级了)

  • 所有字段都以部门命名,当该字段需要角色时在下一级字段添加角色名,该部门可以前端定义为该部门负责人,获取接口时做数据处理first: [{name:second,children:[]},{name:second}]

privs权限表

  • 自定义权限

user_branch用户角色关联表

branch_privs角色权限关联表

接口部分

增删改查

  1. 角色的增删改查
  2. 用户的增删改查
  3. 可根据用户id拿到拥有的角色id以及所属部门

前端部分

  1. 既然自己玩肯定花样多一点ElementUI有个tree树形控件作为保底选择
  2. 权限的增删改查通过盒子样式去实现

目标

  • 再不耽误工作质量的情况下以及突发状况截止时间7月31号

上班归上班,偷敲代码自己玩,自己玩!!!

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享