diff --git a/packages/hydrooj/src/handler/domain.ts b/packages/hydrooj/src/handler/domain.ts index 92880bd8f..793c40dde 100644 --- a/packages/hydrooj/src/handler/domain.ts +++ b/packages/hydrooj/src/handler/domain.ts @@ -175,7 +175,7 @@ class DomainUserHandler extends ManageHandler { @param('role', Types.Role) @param('join', Types.Boolean) async postSetUsers(domainId: string, uid: number[], role: string, join = false) { - if (join) this.checkPriv(PRIV.PRIV_MANAGE_ALL_DOMAIN); + if (join && !system.get('server.allowInvite')) this.checkPriv(PRIV.PRIV_MANAGE_ALL_DOMAIN); await Promise.all([ domain.setUserRole(domainId, uid, role), oplog.log(this, 'domain.setRole', { uid, role, join }), diff --git a/packages/hydrooj/src/model/setting.ts b/packages/hydrooj/src/model/setting.ts index 7fea88885..74d36eddb 100644 --- a/packages/hydrooj/src/model/setting.ts +++ b/packages/hydrooj/src/model/setting.ts @@ -314,6 +314,7 @@ SystemSetting(Schema.object({ verify: Schema.boolean().default(true).description('Verify register email'), }).extra('family', 'setting_smtp'), server: Schema.object({ + allowInvite: Schema.boolean().default(true).description('Allow invite users'), center: Schema.string().default('https://hydro.ac/center').description('Server Center').role('url').hidden(), name: Schema.string().default('Hydro').description('Server Name'), url: Schema.string().default('/').description('Server BaseURL'), diff --git a/packages/ui-default/templates/domain_user.html b/packages/ui-default/templates/domain_user.html index 450f73a92..cc0c40689 100644 --- a/packages/ui-default/templates/domain_user.html +++ b/packages/ui-default/templates/domain_user.html @@ -1,7 +1,7 @@ {% extends "domain_base.html" %} {% block domain_content %} {{ set(UiContext, 'roles', roles.map(eval('(i) => i._id'))) }} -{{ set(UiContext, 'canForceJoin', handler.user.hasPriv(PRIV.PRIV_MANAGE_ALL_DOMAIN)) }} +{{ set(UiContext, 'canForceJoin', model.system.get('server.allowInvite') or handler.user.hasPriv(PRIV.PRIV_MANAGE_ALL_DOMAIN)) }} {% set _rolesSelect = roles.filter(eval("(i) => i._id !== 'guest'")).map(eval('(role) => [role._id, role._id]')) %}