From 74df7e1f71128e9680f3e569e474e274545f9ed1 Mon Sep 17 00:00:00 2001 From: Montassar Ghanmy Date: Wed, 30 Aug 2023 10:06:38 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=95=B9=20Manage=20root=20users=20default?= =?UTF-8?q?=20role=20(#180)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🕹 Manage root users default role --- .../node/src/services/console/clients/remote.ts | 14 ++++++++++++-- .../node/src/services/console/web/controller.ts | 11 ++++++++++- .../body/drive/modals/manage-users/index.tsx | 10 +++++++--- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/tdrive/backend/node/src/services/console/clients/remote.ts b/tdrive/backend/node/src/services/console/clients/remote.ts index 99b83af0..b2326895 100644 --- a/tdrive/backend/node/src/services/console/clients/remote.ts +++ b/tdrive/backend/node/src/services/console/clients/remote.ts @@ -22,7 +22,8 @@ import User, { getInstance } from "../../user/entities/user"; import { getInstance as getCompanyInstance } from "../../user/entities/company"; import { ConsoleServiceImpl } from "../service"; import coalesce from "../../../utils/coalesce"; - +import config from "config"; +import { CompanyUserRole } from "src/services/user/web/types"; export class ConsoleRemoteClient implements ConsoleServiceClient { version: "1"; client: AxiosInstance; @@ -30,6 +31,10 @@ export class ConsoleRemoteClient implements ConsoleServiceClient { private infos: ConsoleOptions; private verifier: OidcJwtVerifier; + private rootAdmins: string[] = config.has("drive.rootAdmins") + ? config.get("drive.rootAdmins") + : []; + constructor(consoleInstance: ConsoleServiceImpl) { this.infos = consoleInstance.consoleOptions; this.verifier = new OidcJwtVerifier({ @@ -167,7 +172,12 @@ export class ConsoleRemoteClient implements ConsoleServiceClient { ); } - await gr.services.companies.setUserRole(company.id, user.id, "admin"); + let userRole: CompanyUserRole = "member"; + if (this.rootAdmins.includes(userDTO.email)) { + userRole = "admin"; + } + + await gr.services.companies.setUserRole(company.id, user.id, userRole); await gr.services.users.save(user, { user: { id: user.id, server_request: true } }); diff --git a/tdrive/backend/node/src/services/console/web/controller.ts b/tdrive/backend/node/src/services/console/web/controller.ts index 6ff1fa63..5cdad974 100644 --- a/tdrive/backend/node/src/services/console/web/controller.ts +++ b/tdrive/backend/node/src/services/console/web/controller.ts @@ -22,9 +22,14 @@ import { getInstance as getCompanyInstance } from "../../../services/user/entiti import Workspace from "../../../services/workspaces/entities/workspace"; import gr from "../../global-resolver"; import { Configuration } from "../../../core/platform/framework"; +import { CompanyUserRole } from "src/services/user/web/types"; +import config from "config"; export class ConsoleController { private passwordEncoder: PasswordEncoder; + private rootAdmins: string[] = config.has("drive.rootAdmins") + ? config.get("drive.rootAdmins") + : []; constructor() { this.passwordEncoder = new PasswordEncoder(); @@ -72,6 +77,7 @@ export class ConsoleController { email_canonical: email, username_canonical: (email.replace("@", ".") || "").toLocaleLowerCase(), }); + let userRole: CompanyUserRole = "member"; const user = await gr.services.users.create(newUser); await gr.services.users.setPassword({ id: user.entity.id }, request.body.password); @@ -85,7 +91,10 @@ export class ConsoleController { }); company = await gr.services.companies.createCompany(newCompany); } - await gr.services.companies.setUserRole(company.id, user.entity.id, "admin"); + if (this.rootAdmins.includes(email)) { + userRole = "admin"; + } + await gr.services.companies.setUserRole(company.id, user.entity.id, userRole); //In case someone invited us to a workspace await gr.services.workspaces.processPendingUser(user.entity); diff --git a/tdrive/frontend/src/app/views/client/body/drive/modals/manage-users/index.tsx b/tdrive/frontend/src/app/views/client/body/drive/modals/manage-users/index.tsx index 09beea60..d7d0dbc6 100644 --- a/tdrive/frontend/src/app/views/client/body/drive/modals/manage-users/index.tsx +++ b/tdrive/frontend/src/app/views/client/body/drive/modals/manage-users/index.tsx @@ -1,3 +1,4 @@ +import { useState } from 'react'; import { Modal } from '@atoms/modal'; import Avatar from '@atoms/avatar'; import { Base, Info } from '@atoms/text'; @@ -10,6 +11,7 @@ import currentUserService from '@features/users/services/current-user-service'; import { useUserCompanyList } from '@features/users/hooks/use-user-company-list'; import { AccessLevel } from './common'; import Languages from 'features/global/services/languages-service'; +import { DriveFileAccessLevel } from 'app/features/drive/types'; export type UsersModalType = { open: boolean; @@ -54,7 +56,8 @@ const UserAccessLevel = ({ const user = useUser(userId); const { user: currentUser } = useCurrentUser(); const { item, loading, updateLevel } = useDriveItem(id); - const level = role == "admin" ? "manage" : "read"; + const [level, setLevel] = useState(role == "admin" ? "manage" : "read"); + //const level = role == "admin" ? "manage" : "read"; return (
@@ -73,11 +76,12 @@ const UserAccessLevel = ({
{ - updateLevel(user?.id || '', level); + setLevel(level); + updateLevel(userId || '', level); }} />