yapi/server/controllers/base.js

94 lines
2.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import yapi from '../yapi.js'
import projectModel from '../models/project.js'
import userModel from '../models/user.js'
const jwt = require('jsonwebtoken');
class baseController{
constructor(ctx){
this.ctx = ctx;
//网站上线后role对象key是不能修改的value可以修改
this.roles = {
admin: 'Admin',
member: '网站会员'
}
}
async init(ctx){
this.$user = null;
let ignoreRouter = [
'/user/login_by_token',
'/user/login',
'/user/reg',
'/user/status',
'/user/logout'
]
if(ignoreRouter.indexOf(ctx.path) > -1){
this.$auth = true;
}else{
await this.checkLogin(ctx)
}
}
getUid(ctx){
return parseInt(this.$uid, 10);
}
async checkLogin(ctx){
let token = ctx.cookies.get('_yapi_token');
let uid = ctx.cookies.get('_yapi_uid');
try{
if(!token || !uid) return false;
let userInst = yapi.getInst(userModel); //创建user实体
let result = await userInst.findById(uid);
let decoded = jwt.verify(token, result.passsalt)
if(decoded.uid == uid){
this.$uid = uid;
this.$auth = true;
this.$user = result;
return true;
}
return false;
}catch(e){
return false;
}
}
async getLoginStatus(ctx){
if(await this.checkLogin(ctx) === true){
return ctx.body = yapi.commons.resReturn(yapi.commons.fieldSelect(this.$user,['_id','username','email', 'up_time', 'add_time']));
}
return ctx.body = yapi.commons.resReturn(null, 300 , 'Please login.');
}
getRole(){
return this.$user.role;
}
async jungeProjectAuth(id){
let model = yapi.getInst(projectModel);
if(this.getRole() === 'admin') return true;
if(!id) return false;
let result = await model.get(id);
if(result.uid === this.getUid()){
return true;
}
return false;
}
async jungeMemberAuth(id, member_uid){
let model = yapi.getInst(projectModel);
if(this.getRole() === 'admin') return true;
if(!id || !member_uid) return false;
let result = await model.checkMemberRepeat(id, member_uid);
if(result > 0){
return true;
}
return false;
}
}
module.exports = baseController