mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-19 17:38:19 +08:00
拆分域管理与系统管理
This commit is contained in:
1 parent
385e46ae42
commit
faec4744d7
24 files changed
+249
-168
No files matched your search
+1
-128
@@ -1,4 +1,3 @@
|
||||
const user = require('../model/user');
|
||||
const domain = require('../model/domain');
|
||||
const setting = require('../model/setting');
|
||||
const system = require('../model/system');
|
||||
@@ -6,7 +5,7 @@ const { Route, Handler } = require('../service/server');
|
||||
const { PERM_MANAGE } = require('../permission');
|
||||
const hpm = require('../lib/hpm');
|
||||
const loader = require('../loader');
|
||||
const { RoleAlreadyExistError, ValidationError, PermissionError } = require('../error');
|
||||
const { PermissionError } = require('../error');
|
||||
|
||||
class ManageHandler extends Handler {
|
||||
async prepare({ domainId }) {
|
||||
@@ -33,124 +32,6 @@ class ManageDashboardHandler extends ManageHandler {
|
||||
}
|
||||
}
|
||||
|
||||
class ManageEditHandler extends ManageHandler {
|
||||
async get() {
|
||||
const path = [
|
||||
['Hydro', '/'],
|
||||
['manage', '/manage'],
|
||||
['manage_edit', null],
|
||||
];
|
||||
this.response.template = 'manage_edit.html';
|
||||
this.response.body = { domain: this.domain, path };
|
||||
}
|
||||
|
||||
async post({
|
||||
domainId, name, gravatar, bulletin,
|
||||
}) {
|
||||
await domain.edit(domainId, { name, gravatar, bulletin });
|
||||
this.response.redirect = '/manage/dashboard';
|
||||
}
|
||||
}
|
||||
|
||||
class ManageUserHandler extends ManageHandler {
|
||||
async get({ domainId }) {
|
||||
// FIXME(masnn) UPDATE CODE
|
||||
const uids = [];
|
||||
const rudocs = {};
|
||||
const [udocs, roles] = await Promise.all([
|
||||
user.getInDomain(domainId),
|
||||
user.getRoles(domainId),
|
||||
]);
|
||||
for (const role of roles) rudocs[role._id] = [];
|
||||
for (const udoc of udocs) {
|
||||
uids.push(udoc.uid);
|
||||
// TODO Improve here
|
||||
// eslint-disable-next-line no-await-in-loop
|
||||
const ud = await user.getById(domainId, udoc.uid);
|
||||
rudocs[udoc.role].push({ ...ud, role: udoc.role });
|
||||
}
|
||||
const rolesSelect = roles.map((role) => [role._id, role._id]);
|
||||
const udict = await user.getList(domainId, uids);
|
||||
const path = [
|
||||
['Hydro', '/'],
|
||||
['manage', '/manage'],
|
||||
['manage_user', null],
|
||||
];
|
||||
this.response.template = 'manage_user.html';
|
||||
this.response.body = {
|
||||
roles, rolesSelect, rudocs, udict, path,
|
||||
};
|
||||
}
|
||||
|
||||
async postSetUser({ domainId, uid, role }) {
|
||||
await user.setRole(domainId, uid, role);
|
||||
this.back();
|
||||
}
|
||||
}
|
||||
|
||||
class ManagePermissionHandler extends ManageHandler {
|
||||
async get({ domainId }) {
|
||||
const [roles, d] = await Promise.all([
|
||||
user.getRoles(domainId),
|
||||
domain.get(domainId),
|
||||
]);
|
||||
const path = [
|
||||
['Hydro', '/'],
|
||||
['manage', '/manage'],
|
||||
['manage_permission', null],
|
||||
];
|
||||
this.response.template = 'manage_permission.html';
|
||||
this.response.body = { roles, domain: d, path };
|
||||
}
|
||||
|
||||
async post({ domainId }) {
|
||||
const roles = {};
|
||||
for (const role in this.request.body) {
|
||||
if (this.request.body[role] instanceof Array) {
|
||||
roles[role] = this.request.body[role].join('');
|
||||
}
|
||||
}
|
||||
await user.setRoles(domainId, roles);
|
||||
this.back();
|
||||
}
|
||||
}
|
||||
|
||||
class ManageRoleHandler extends ManageHandler {
|
||||
async get({ domainId }) {
|
||||
const [roles, d] = await Promise.all([
|
||||
user.getRoles(domainId),
|
||||
domain.get(domainId),
|
||||
]);
|
||||
const path = [
|
||||
['Hydro', '/'],
|
||||
['manage', '/manage'],
|
||||
['manage_role', null],
|
||||
];
|
||||
this.response.template = 'manage_role.html';
|
||||
this.response.body = { roles, domain: d, path };
|
||||
}
|
||||
|
||||
async postAdd({ domainId, role }) {
|
||||
const [r, u] = await Promise.all([
|
||||
user.getRole(domainId, role),
|
||||
user.getRole(domainId, 'default'),
|
||||
]);
|
||||
if (r) throw new RoleAlreadyExistError(role);
|
||||
await user.addRole(domainId, role, u.perm);
|
||||
this.back();
|
||||
}
|
||||
|
||||
async postDelete({ roles }) {
|
||||
for (const role of roles) {
|
||||
if (['root', 'default', 'guest'].includes(role)) {
|
||||
throw new ValidationError('role');
|
||||
}
|
||||
}
|
||||
await user.deleteRoles(roles);
|
||||
this.back();
|
||||
}
|
||||
}
|
||||
|
||||
class SystemHandler extends Handler {
|
||||
async prepare() {
|
||||
if (!this.user.priv) throw new PermissionError('???');
|
||||
@@ -210,10 +91,6 @@ class SystemSettingHandler extends SystemHandler {
|
||||
async function apply() {
|
||||
Route('/manage', module.exports.ManageMainHandler);
|
||||
Route('/manage/dashboard', module.exports.ManageDashboardHandler);
|
||||
Route('/manage/edit', module.exports.ManageEditHandler);
|
||||
Route('/manage/user', module.exports.ManageUserHandler);
|
||||
Route('/manage/permission', module.exports.ManagePermissionHandler);
|
||||
Route('/manage/role', module.exports.ManageRoleHandler);
|
||||
Route('/manage/module', SystemModuleHandler);
|
||||
Route('/manage/setting', SystemSettingHandler);
|
||||
}
|
||||
@@ -221,10 +98,6 @@ async function apply() {
|
||||
global.Hydro.handler.manage = module.exports = {
|
||||
ManageMainHandler,
|
||||
ManageDashboardHandler,
|
||||
ManageEditHandler,
|
||||
ManageUserHandler,
|
||||
ManagePermissionHandler,
|
||||
ManageRoleHandler,
|
||||
SystemModuleHandler,
|
||||
SystemSettingHandler,
|
||||
apply,
|
||||
|
||||
Reference in new issue
Block a user