mirror of
https://github.com/nocodb/nocodb.git
synced 2026-02-01 23:48:33 +00:00
Merge pull request #12908 from nocodb/fix/migrate-admin-ws
fix: verify default ws owner
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user