第一次提交
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
/**
|
||||
* 权限验证中间件,一般情况下,无需修改此处的代码
|
||||
*/
|
||||
const methodPermission = require('../config/permission');
|
||||
const { ERROR } = require('../common/error');
|
||||
|
||||
function isAccessAllowed(user = {}, setting) {
|
||||
const {
|
||||
role: userRole = [],
|
||||
permission: userPermission = []
|
||||
} = user
|
||||
const {
|
||||
role: settingRole = [],
|
||||
permission: settingPermission = []
|
||||
} = setting
|
||||
if (userRole.includes('admin')) {
|
||||
return;
|
||||
}
|
||||
if (settingRole.length > 0 && settingRole.every(item => !userRole.includes(item))) {
|
||||
throw { errCode: ERROR[50403] };
|
||||
}
|
||||
if (settingPermission.length > 0 && settingPermission.every(item => !userPermission.includes(item))) {
|
||||
throw { errCode: ERROR[50403] };
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = async function() {
|
||||
const methodName = this.getMethodName();
|
||||
if (!(methodName in methodPermission)) {
|
||||
return;
|
||||
}
|
||||
const {
|
||||
auth,
|
||||
role,
|
||||
permission
|
||||
} = methodPermission[methodName];
|
||||
if (auth || role || permission) {
|
||||
await this.middleware.auth();
|
||||
}
|
||||
if (role && role.length === 0) {
|
||||
throw new Error('[AccessControl]Empty role array is not supported');
|
||||
}
|
||||
if (permission && permission.length === 0) {
|
||||
throw new Error('[AccessControl]Empty permission array is not supported');
|
||||
}
|
||||
return isAccessAllowed(this.authInfo, {
|
||||
role,
|
||||
permission
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
module.exports = async function(key = true) {
|
||||
if (this.authInfo) { // 多次执行auth时如果第一次成功后续不再执行
|
||||
return;
|
||||
}
|
||||
const token = this.getUniIdToken();
|
||||
const payload = await this.uniIdCommon.checkToken(token);
|
||||
if (payload.errCode) {
|
||||
if (key) {
|
||||
throw payload;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.authInfo = payload;
|
||||
if (payload.token && typeof this.response === "object") {
|
||||
this.response.newToken = {
|
||||
token: payload.token,
|
||||
tokenExpired: payload.tokenExpired
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
const accessControl = require("./access-control");
|
||||
const auth = require("./auth");
|
||||
|
||||
module.exports = {
|
||||
accessControl,
|
||||
auth
|
||||
}
|
||||
Reference in New Issue
Block a user