mirror of
https://github.com/YMFE/yapi.git
synced 2024-12-27 05:30:14 +08:00
115 lines
2.7 KiB
JavaScript
115 lines
2.7 KiB
JavaScript
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() {
|
||
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) {
|
||
let result = yapi.commons.fieldSelect(this.$user, ['_id', 'username', 'email', 'up_time', 'add_time','role']);
|
||
result.server_ip = yapi.WEBCONFIG.server_ip;
|
||
return ctx.body = yapi.commons.resReturn(result);
|
||
}
|
||
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; |