domain_create

This commit is contained in:
masnn committed 2020-06-04 23:14:59 +08:00
1 parent faec4744d7
commit 63d55cedf4
7 files changed
+91 -13

No files matched your search

+25 -1
View File
@@ -1,8 +1,31 @@
const user = require('../model/user');
const domain = require('../model/domain');
const system = require('../model/system');
const { Route, Handler } = require('../service/server');
const { PERM_MANAGE } = require('../permission');
const { RoleAlreadyExistError, ValidationError } = require('../error');
const { RoleAlreadyExistError, ValidationError, PermissionError } = require('../error');
class DomainCreateHandler extends Handler {
async prepare() {
if (this.user.priv !== 1) {
if (!await system.get('user.create_domain')) throw new PermissionError('domain_create');
}
}
async get() {
const path = [
['Hydro', '/'],
['domain_create', null],
];
this.response.body = { path };
this.response.template = 'domain_create.html';
}
async post({ id, name }) {
await domain.add(id, this.user._id, name);
this.response.body = { domainId: id };
}
}
class ManageHandler extends Handler {
async prepare({ domainId }) {
@@ -135,6 +158,7 @@ class DomainRoleHandler extends ManageHandler {
}
async function apply() {
Route('/domain/create', DomainCreateHandler);
Route('/domain/dashboard', DomainDashboardHandler);
Route('/domain/edit', DomainEditHandler);
Route('/domain/user', DomainUserHandler);
+11 -3
View File
@@ -2,9 +2,16 @@ const permission = require('../permission');
global.Hydro.ui.nav = [];
const Item = (path, name, prefix, perm) => {
const trueChecker = () => true;
const Item = (path, name, prefix, perm, checker) => {
if (perm && checker) {
checker = ((_chk) => (handler) => _chk(handler) && handler.user.hasPerm(perm))(checker);
} else if (perm) {
checker = (handler) => handler.user.hasPerm(perm);
} else checker = trueChecker;
global.Hydro.ui.nav.push({
path, name, prefix, perm,
path, name, prefix, checker,
});
};
@@ -14,6 +21,7 @@ Item('/t', 'training_main', 'training', permission.PERM_VIEW_TRAINING);
Item('/homework', 'homework_main', 'homework', permission.PERM_VIEW_HOMEWORK);
Item('/discuss', 'discussion_main', 'discussion', permission.PERM_VIEW_DISCUSSION);
Item('/c', 'contest_main', 'contest', permission.PERM_VIEW_CONTEST);
Item('/domain', 'domain_dashboard', 'domain', permission.PERM_MANAGE);
Item('/domain/dashboard', 'domain_dashboard', 'domain', permission.PERM_MANAGE);
Item('/manage/dashboard', 'manage_dashboard', 'manage', null, (handler) => handler.user.priv === 1);
global.Hydro.lib.nav = module.exports = Item;
+4 -2
View File
@@ -15,9 +15,11 @@ const coll = db.collection('domain');
* @param {string} domainId
* @param {number} owner
*/
function add(domainId, owner) {
function add(domainId, owner, name) {
const tasks = [
coll.insertOne({ _id: domainId, owner, bulletin: '' }),
coll.insertOne({
_id: domainId, owner, name, bulletin: '',
}),
];
for (const id in builtin.BUILTIN_ROLES) {
tasks.push(
+1
View File
@@ -45,6 +45,7 @@ for (const setting in SETTINGS) SETTINGS_BY_KEY[setting.key] = setting;
const SYSTEM_SETTINGS = [
Setting('setting_basic', 'user.register', null, false, 'checkbox', 'Allow register'),
Setting('setting_basic', 'user.create_domain', null, true, 'checkbox', 'Allow domain creation'),
Setting('setting_smtp', 'smtp.user', null, null, 'text', 'SMTP Username'),
Setting('setting_smtp', 'smtp.pass', null, null, 'password', 'SMTP Password'),
Setting('setting_smtp', 'smtp.host', null, null, 'text', 'SMTP Server Host'),