@jianghujs/jianghu
Version:
Progressive Enterprise Framework
41 lines (36 loc) • 1.51 kB
JavaScript
;
const { userStatusObj } = require('../../../../app/constant/constant');
const { BizError, errorInfoEnum } = require('../../../../app/constant/error');
module.exports = option => {
return async (ctx, next) => {
const { packagePage, userInfo } = ctx;
const { user, userAppList, allowPageList } = userInfo;
const { pageId } = packagePage;
const isLoginUser = user && user.userId;
const { config, jianghuKnex } = ctx.app;
const { appType, appId } = config;
// 对于 public page ====》不需要做 用户状态的校验
// public: { user: "*", group: "public", role: "*" }
const allUserGroupRolePageList = await jianghuKnex('_user_group_role_page').select();
const isNotPublic = !allUserGroupRolePageList.find(
rule =>
rule.group === 'public' && rule.role === '*' && rule.page === pageId
);
const { originalUrl } = ctx.request;
const originalUrlEncode = encodeURIComponent(originalUrl);
// 2 判断用户状态
if (isNotPublic && isLoginUser) {
const { userStatus } = user;
if (userStatus === userStatusObj.banned) {
throw new BizError(errorInfoEnum.user_banned);
}
if (userStatus !== userStatusObj.active) {
throw new BizError(errorInfoEnum.user_status_error);
}
}
// 3. 判断用户是否有 当前 packagePage 的权限
if (allowPageList.findIndex(x => x.pageId === pageId) === -1) {
throw new BizError(errorInfoEnum.page_forbidden);
}
};
};