基于之前踩过了坑,所以重新进行权限设计,不过在这个过程中,看到一个文档,发现一个可以优化的地方,我写接口没做请求约束,所以加了一个请求约束单
接口调用限制: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角色权限关联表
接口部分
增删改查
- 角色的增删改查
- 用户的增删改查
- 可根据用户id拿到拥有的角色id以及所属部门
前端部分
- 既然自己玩肯定花样多一点ElementUI有个tree树形控件作为保底选择
- 权限的增删改查通过盒子样式去实现
目标
- 再不耽误工作质量的情况下以及突发状况截止时间7月31号
上班归上班,偷敲代码自己玩,自己玩!!!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END