diff --git a/packages/nocodb/src/models/BaseUser.ts b/packages/nocodb/src/models/BaseUser.ts index c4c5ca2465..b6e9998b8e 100644 --- a/packages/nocodb/src/models/BaseUser.ts +++ b/packages/nocodb/src/models/BaseUser.ts @@ -133,7 +133,7 @@ export default class BaseUser { baseId: string, userId: string, ncMeta = Noco.ncMeta, - ) { + ): Promise { let baseUser = baseId && userId && @@ -178,32 +178,14 @@ export default class BaseUser { ); } } - return this.castType(baseUser); - } - /** - * Check if user entry exists in BaseUser table - * @param context - * @param baseId - * @param userId - * @param ncMeta - */ - public static async getBaseUserFromDb( - context: NcContext, - baseId: string, - userId: string, - ncMeta = Noco.ncMeta, - ): Promise { - const baseUser = await ncMeta.metaGet2( - context.workspace_id, - context.base_id, - MetaTable.PROJECT_USERS, - { - base_id: baseId, - fk_user_id: userId, - }, - ) - return baseUser && this.castType(baseUser); + // decide if user is mapped to base by checking if base_id is present + // base_id will be null if base_user entry is not present + if (baseUser) { + baseUser.is_mapped = !!baseUser.base_id; + } + + return this.castType(baseUser); } public static async getUsersList( diff --git a/packages/nocodb/src/services/base-users/base-users.service.ts b/packages/nocodb/src/services/base-users/base-users.service.ts index 93c6dd94f4..cfece00ceb 100644 --- a/packages/nocodb/src/services/base-users/base-users.service.ts +++ b/packages/nocodb/src/services/base-users/base-users.service.ts @@ -105,11 +105,7 @@ export class BaseUsersService { if (user) { // check if this user has been added to this base - const baseUser = await BaseUser.getBaseUserFromDb( - context, - param.baseId, - user.id, - ); + const baseUser = await BaseUser.get(context, param.baseId, user.id); const base = await Base.get(context, param.baseId); @@ -118,13 +114,13 @@ export class BaseUsersService { } // if already exists and has a role then throw error - if (baseUser?.roles) { + if (baseUser?.is_mapped && baseUser?.roles) { NcError.badRequest( `${user.email} with role ${baseUser.roles} already exists in this base`, ); } // if user exist and role is not assigned then assign role by updating base user - else if (baseUser) { + else if (baseUser?.is_mapped) { await BaseUser.updateRoles( context, param.baseId, @@ -476,11 +472,7 @@ export class BaseUsersService { if (Object.keys(baseUserData).length) { // create new base user if it doesn't exist if ( - !(await BaseUser.getBaseUserFromDb( - context, - param.baseId, - param.user?.id, - )) + !(await BaseUser.get(context, param.baseId, param.user?.id))?.is_mapped ) { await BaseUser.insert(context, { ...baseUserData,