Merge pull request #12908 from nocodb/fix/migrate-admin-ws

fix: verify default ws owner
This commit is contained in:
Mert E.
2026-01-21 17:52:02 +03:00
committed by GitHub
2 changed files with 59 additions and 2 deletions

View File

@@ -4,7 +4,10 @@ import bcrypt from 'bcryptjs';
import { validatePassword } from 'nocodb-sdk';
import boxen from 'boxen';
import isEmail from 'validator/lib/isEmail';
import { verifyDefaultWorkspace } from '~/helpers/verifyDefaultWorkspace';
import {
verifyDefaultWorkspace,
verifyDefaultWsOwner,
} from '~/helpers/verifyDefaultWorkspace';
import { T } from '~/utils';
import NocoCache from '~/cache/NocoCache';
import Noco from '~/Noco';
@@ -101,7 +104,6 @@ export default async function initAdminFromEnv(_ncMeta = Noco.ncMeta) {
);
let superUserPresent = false;
for (const user of superUsers) {
if (!user.roles?.includes('super')) continue;
@@ -279,6 +281,7 @@ export default async function initAdminFromEnv(_ncMeta = Noco.ncMeta) {
);
}
}
await verifyDefaultWsOwner(ncMeta);
}
await ncMeta.commit();

View File

@@ -97,3 +97,57 @@ export const verifyDefaultWorkspace = async (
Noco.ncDefaultWorkspaceId = workspace.id;
};
export const verifyDefaultWsOwner = async (ncMeta = Noco.ncMeta) => {
// if ee do not need to handle this
if (isEE) {
return;
}
// find super user
const user = await ncMeta
.knexConnection(MetaTable.USERS)
.where('roles', 'like', '%super%')
.first();
// no user created yet, we don't need to init ws
if (!user) {
return;
}
// if no default ws id present, we verify it first
if (!Noco.ncDefaultWorkspaceId) {
await verifyDefaultWorkspace(user, ncMeta);
}
// get the user's workspace role
const workspaceUser = await ncMeta
.knexConnection(MetaTable.WORKSPACE_USER)
.where('fk_workspace_id', Noco.ncDefaultWorkspaceId)
.andWhere('fk_user_id', user.id)
.first();
// if no role for user, we assign owner
if (!workspaceUser) {
await ncMeta.metaInsert2(
RootScopes.WORKSPACE,
RootScopes.WORKSPACE,
MetaTable.WORKSPACE_USER,
{
fk_workspace_id: Noco.ncDefaultWorkspaceId,
fk_user_id: user.id,
roles: WorkspaceUserRoles.OWNER,
},
true,
);
}
// however if user has workspace role but not owner, we update
else if (workspaceUser.roles !== WorkspaceUserRoles.OWNER) {
await ncMeta
.knexConnection(MetaTable.WORKSPACE)
.where('fk_workspace_id', Noco.ncDefaultWorkspaceId)
.andWhere('fk_user_id', user.id)
.update({
roles: WorkspaceUserRoles.OWNER,
});
}
};