From 2e600b92e5e1778577f3dd1debb00af34c2aff63 Mon Sep 17 00:00:00 2001 From: undefined Date: Tue, 22 Dec 2020 22:34:44 +0800 Subject: [PATCH] =?UTF-8?q?core:=20=E4=BF=AE=E5=A4=8D=E6=88=91=E7=9A=84?= =?UTF-8?q?=E5=9F=9F=E6=98=BE=E7=A4=BA=E9=81=97=E6=BC=8F=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/handler/home.ts | 1 + packages/hydrooj/src/model/domain.ts | 7 ++++++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 0a2470343..f03d3ef9e 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.15.2", + "version": "2.15.3", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/handler/home.ts b/packages/hydrooj/src/handler/home.ts index 5f1dac755..fffe63574 100644 --- a/packages/hydrooj/src/handler/home.ts +++ b/packages/hydrooj/src/handler/home.ts @@ -297,6 +297,7 @@ class HomeDomainCreateHandler extends Handler { gravatar = gravatar || this.user.gravatar || this.user.mail || 'guest@hydro.local'; const domainId = await domain.add(id, this.user._id, name, bulletin); await domain.edit(domainId, { gravatar }); + await domain.setUserRole(domainId, this.user._id, 'admin'); this.response.redirect = this.url('domain_dashboard', { domainId }); this.response.body = { domainId }; } diff --git a/packages/hydrooj/src/model/domain.ts b/packages/hydrooj/src/model/domain.ts index 7efb668e3..f5b771369 100644 --- a/packages/hydrooj/src/model/domain.ts +++ b/packages/hydrooj/src/model/domain.ts @@ -140,6 +140,7 @@ export async function getDomainUser(domainId: string, udoc: DomainUserArg) { if (udoc.priv & PRIV.PRIV_MANAGE_ALL_DOMAIN) dudoc.role = 'admin'; dudoc.role = dudoc.role || 'default'; const ddoc = await get(domainId); + if (ddoc.owner === udoc._id) dudoc.role = 'admin'; dudoc.perm = ddoc.roles[dudoc.role] ? BigInt(ddoc.roles[dudoc.role]) : BUILTIN_ROLES[dudoc.role]; @@ -167,13 +168,17 @@ export async function incUserInDomain(domainId: string, uid: number, field: stri } export async function getDictUserByDomainId(uid: number) { - const dudocs = await collUser.find({ uid }).toArray(); + const [dudocs, ddocs] = await Promise.all([ + collUser.find({ uid }).toArray(), + coll.find({ owner: uid }).toArray(), + ]); const dudict = {}; for (const dudoc of dudocs) { // eslint-disable-next-line no-await-in-loop dudict[dudoc.domainId] = await get(dudoc.domainId); dudict[dudoc.domainId].role = dudoc.role; } + for (const ddoc of ddocs) dudict[ddoc._id] = 'admin'; return dudict; }