|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
|
import { Settings } from '@rocket.chat/models'; |
|
|
|
|
import { Permissions, Roles, Settings, Users } from '@rocket.chat/models'; |
|
|
|
|
import type { UpdateResult } from 'mongodb'; |
|
|
|
|
|
|
|
|
|
import { upsertPermissions } from '../../../app/authorization/server/functions/upsertPermissions'; |
|
|
|
|
@ -55,10 +55,46 @@ const moveRetentionSetting = async () => { |
|
|
|
|
await Settings.updateMany({ _id: { $in: Array.from(maxAgeSettingMap.keys()) } }, { $set: { value: -1 } }); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
async function setPermissionsToNewRole() { |
|
|
|
|
const role = await Roles.findOneById('federated-external'); |
|
|
|
|
|
|
|
|
|
// if role was found it means it was already created with the permissions, so we can skip it
|
|
|
|
|
if (role) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// if federation was used before the new role was created, we need to update their roles with the new role
|
|
|
|
|
await Users.updateMany({ federated: true }, { $addToSet: { roles: 'federated-external' } }); |
|
|
|
|
|
|
|
|
|
const rolePermissions = [ |
|
|
|
|
'create-c', |
|
|
|
|
'create-d', |
|
|
|
|
'create-p', |
|
|
|
|
'delete-own-message', |
|
|
|
|
'leave-c', |
|
|
|
|
'leave-p', |
|
|
|
|
'mention-all', |
|
|
|
|
'mention-here', |
|
|
|
|
'start-discussion', |
|
|
|
|
'start-discussion-other-user', |
|
|
|
|
'view-c-room', |
|
|
|
|
'view-d-room', |
|
|
|
|
'view-p-room', |
|
|
|
|
'preview-c-room', |
|
|
|
|
'view-outside-room', |
|
|
|
|
'mobile-upload-file', |
|
|
|
|
'access-federation', |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
// since this is a one time query, no need to create a method in model class for it
|
|
|
|
|
await Permissions.updateMany({ _id: { $in: rolePermissions } }, { $addToSet: { roles: 'federated-external' } }); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
export const performMigrationProcedure = async (): Promise<void> => { |
|
|
|
|
await migrateDatabase(version === 'latest' ? version : parseInt(version), subcommands); |
|
|
|
|
// perform operations when the server is starting with a different version
|
|
|
|
|
await onServerVersionChange(async () => { |
|
|
|
|
await setPermissionsToNewRole(); |
|
|
|
|
await upsertPermissions(); |
|
|
|
|
await ensureCloudWorkspaceRegistered(); |
|
|
|
|
await moveRetentionSetting(); |
|
|
|
|
|