diff --git a/.changeset/chilly-cobras-look.md b/.changeset/chilly-cobras-look.md new file mode 100644 index 00000000000..9e7bba192bb --- /dev/null +++ b/.changeset/chilly-cobras-look.md @@ -0,0 +1,6 @@ +--- +'@rocket.chat/i18n': major +'@rocket.chat/meteor': major +--- + +Removes deprecated VoIP permissions diff --git a/.changeset/curly-bats-wink.md b/.changeset/curly-bats-wink.md new file mode 100644 index 00000000000..79bd2e7e379 --- /dev/null +++ b/.changeset/curly-bats-wink.md @@ -0,0 +1,16 @@ +--- +'@rocket.chat/model-typings': major +'@rocket.chat/core-typings': major +'@rocket.chat/rest-typings': major +'@rocket.chat/ui-contexts': major +'@rocket.chat/ui-voip': major +'@rocket.chat/models': major +'@rocket.chat/i18n': major +'@rocket.chat/meteor': major +'@rocket.chat/apps-engine': minor +'@rocket.chat/core-services': minor +'@rocket.chat/message-types': minor +'@rocket.chat/ddp-client': minor +--- + +Removes deprecated VoIP from Omnichannel diff --git a/.changeset/four-timers-enjoy.md b/.changeset/four-timers-enjoy.md new file mode 100644 index 00000000000..8ce7068fa7b --- /dev/null +++ b/.changeset/four-timers-enjoy.md @@ -0,0 +1,11 @@ +--- +'@rocket.chat/model-typings': major +'@rocket.chat/core-typings': major +'@rocket.chat/rest-typings': major +'@rocket.chat/models': major +'@rocket.chat/i18n': major +'@rocket.chat/meteor': major +'@rocket.chat/core-services': minor +--- + +Removes Deprecated FreeSwitch integration diff --git a/apps/meteor/app/api/server/lib/users.ts b/apps/meteor/app/api/server/lib/users.ts index 9bb27e09f02..00dfc3e8f52 100644 --- a/apps/meteor/app/api/server/lib/users.ts +++ b/apps/meteor/app/api/server/lib/users.ts @@ -169,7 +169,6 @@ export async function findPaginatedUsersByStatus({ } const canSeeAllUserInfo = await hasPermissionAsync(uid, 'view-full-other-user-info'); - const canSeeExtension = canSeeAllUserInfo || (await hasPermissionAsync(uid, 'view-user-voip-extension')); const projection = { name: 1, @@ -183,7 +182,7 @@ export async function findPaginatedUsersByStatus({ type: 1, reason: 1, federated: 1, - ...(canSeeExtension ? { freeSwitchExtension: 1 } : {}), + freeSwitchExtension: 1, }; if (searchTerm?.trim()) { diff --git a/apps/meteor/app/api/server/v1/im.ts b/apps/meteor/app/api/server/v1/im.ts index bfdf9641348..b7251e67b18 100644 --- a/apps/meteor/app/api/server/v1/im.ts +++ b/apps/meteor/app/api/server/v1/im.ts @@ -22,7 +22,7 @@ import { openRoom } from '../../../../server/lib/openRoom'; import { createDirectMessage } from '../../../../server/methods/createDirectMessage'; import { hideRoomMethod } from '../../../../server/methods/hideRoom'; import { canAccessRoomIdAsync } from '../../../authorization/server/functions/canAccessRoom'; -import { hasAtLeastOnePermissionAsync, hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; +import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; import { saveRoomSettings } from '../../../channel-settings/server/methods/saveRoomSettings'; import { getRoomByNameOrIdWithOptionToJoin } from '../../../lib/server/functions/getRoomByNameOrIdWithOptionToJoin'; import { getChannelHistory } from '../../../lib/server/methods/getChannelHistory'; @@ -385,12 +385,6 @@ API.v1.addRoute( ...(status && { status: { $in: status } }), }; - const canSeeExtension = await hasAtLeastOnePermissionAsync( - this.userId, - ['view-full-other-user-info', 'view-user-voip-extension'], - room._id, - ); - const options: FindOptions = { projection: { _id: 1, @@ -400,7 +394,7 @@ API.v1.addRoute( statusText: 1, utcOffset: 1, federated: 1, - ...(canSeeExtension && { freeSwitchExtension: 1 }), + freeSwitchExtension: 1, }, skip: offset, limit: count, diff --git a/apps/meteor/app/api/server/v1/users.ts b/apps/meteor/app/api/server/v1/users.ts index 7d2922a328e..3e1b8b7fccc 100644 --- a/apps/meteor/app/api/server/v1/users.ts +++ b/apps/meteor/app/api/server/v1/users.ts @@ -326,7 +326,7 @@ API.v1.addRoute( validateCustomFields(this.bodyParams.customFields); } - if (this.bodyParams.freeSwitchExtension && !(await canEditExtension(this.userId, this.bodyParams.freeSwitchExtension))) { + if (this.bodyParams.freeSwitchExtension && !(await canEditExtension(this.bodyParams.freeSwitchExtension))) { return API.v1.failure('Setting user voice call extension is not allowed', 'error-action-not-allowed'); } diff --git a/apps/meteor/app/authorization/server/constant/permissions.ts b/apps/meteor/app/authorization/server/constant/permissions.ts index f113a086854..4cdc1c05d5b 100644 --- a/apps/meteor/app/authorization/server/constant/permissions.ts +++ b/apps/meteor/app/authorization/server/constant/permissions.ts @@ -211,13 +211,6 @@ export const permissions = [ { _id: 'remove-closed-livechat-room', roles: ['livechat-manager', 'admin'] }, { _id: 'remove-livechat-department', roles: ['livechat-manager', 'admin'] }, - // Allow managing team collab voip extensions - { _id: 'manage-voip-extensions', roles: ['admin'] }, - // Allow viewing the extension number of other users - { _id: 'view-user-voip-extension', roles: ['admin', 'user'] }, - // Allow viewing details of an extension - { _id: 'view-voip-extension-details', roles: ['admin', 'user'] }, - // New Media calls permissions { _id: 'allow-internal-voice-calls', roles: ['admin', 'user'] }, { _id: 'allow-external-voice-calls', roles: ['admin', 'user'] }, diff --git a/apps/meteor/app/lib/server/functions/getFullUserData.ts b/apps/meteor/app/lib/server/functions/getFullUserData.ts index 712da3bd522..f1e1be0af04 100644 --- a/apps/meteor/app/lib/server/functions/getFullUserData.ts +++ b/apps/meteor/app/lib/server/functions/getFullUserData.ts @@ -22,6 +22,7 @@ export const defaultFields = { federated: 1, statusLivechat: 1, abacAttributes: 1, + freeSwitchExtension: 1, } as const; export const fullFields = { @@ -35,7 +36,6 @@ export const fullFields = { requirePasswordChangeReason: 1, roles: 1, importIds: 1, - freeSwitchExtension: 1, } as const; let publicCustomFields: Record = {}; @@ -86,7 +86,6 @@ export async function getFullUserDataByIdOrUsernameOrImportId( (searchType === 'username' && searchValue === caller.username) || (searchType === 'importId' && caller.importIds?.includes(searchValue)); const canViewAllInfo = !!myself || (await hasPermissionAsync(userId, 'view-full-other-user-info')); - const canViewExtension = !!myself || (await hasPermissionAsync(userId, 'view-user-voip-extension')); // Only search for importId if the user has permission to view the import id if (searchType === 'importId' && !canViewAllInfo) { @@ -98,7 +97,6 @@ export async function getFullUserDataByIdOrUsernameOrImportId( const options = { projection: { ...fields, - ...(canViewExtension && { freeSwitchExtension: 1 }), ...(myself && { services: 1 }), }, }; diff --git a/apps/meteor/app/lib/server/functions/saveUser/validateUserEditing.ts b/apps/meteor/app/lib/server/functions/saveUser/validateUserEditing.ts index 2fd4a3f0e6f..edd4caab038 100644 --- a/apps/meteor/app/lib/server/functions/saveUser/validateUserEditing.ts +++ b/apps/meteor/app/lib/server/functions/saveUser/validateUserEditing.ts @@ -12,15 +12,11 @@ const isEditingUserRoles = (previousRoles: IUser['roles'], newRoles?: IUser['rol (newRoles.some((item) => !previousRoles.includes(item)) || previousRoles.some((item) => !newRoles.includes(item))); const isEditingField = (previousValue?: string, newValue?: string) => typeof newValue !== 'undefined' && newValue !== previousValue; -export const canEditExtension = async (userId: string, newExtension?: string) => { +export const canEditExtension = async (newExtension?: string) => { if (!settings.get('VoIP_TeamCollab_Enabled')) { return false; } - if (!(await hasPermissionAsync(userId, 'manage-voip-extensions'))) { - return false; - } - if (newExtension && (await Users.findOneByFreeSwitchExtension(newExtension, { projection: { _id: 1 } }))) { throw new MeteorError('error-extension-not-available', 'Extension is already assigned to another user'); } @@ -117,7 +113,7 @@ export async function validateUserEditing(userId: IUser['_id'], userData: Update if ( isEditingField(user.freeSwitchExtension ?? '', userData.freeSwitchExtension) && - !(await canEditExtension(userId, userData.freeSwitchExtension)) + !(await canEditExtension(userData.freeSwitchExtension)) ) { throw new MeteorError('error-action-not-allowed', 'Edit user voice call extension is not allowed', { method: 'insertOrUpdateUser', diff --git a/apps/meteor/client/views/admin/users/AdminUserForm.tsx b/apps/meteor/client/views/admin/users/AdminUserForm.tsx index 33de6836195..0f128cfeda2 100644 --- a/apps/meteor/client/views/admin/users/AdminUserForm.tsx +++ b/apps/meteor/client/views/admin/users/AdminUserForm.tsx @@ -38,7 +38,7 @@ import AdminUserSetRandomPasswordContent from './AdminUserSetRandomPasswordConte import AdminUserSetRandomPasswordRadios from './AdminUserSetRandomPasswordRadios'; import PasswordFieldSkeleton from './PasswordFieldSkeleton'; import { useSmtpQuery } from './hooks/useSmtpQuery'; -import { useVoipExtensionPermission } from './useVoipExtensionPermission'; +import { useShowVoipExtension } from './useShowVoipExtension'; import { parseCSV } from '../../../../lib/utils/parseCSV'; import UserAvatarEditor from '../../../components/avatar/UserAvatarEditor'; import { useEndpointMutation } from '../../../hooks/useEndpointMutation'; @@ -123,7 +123,7 @@ const AdminUserForm = ({ userData, onReload, context, refetchUserFormData, roleD mode: 'onBlur', }); - const canManageVoipExtension = useVoipExtensionPermission(); + const showVoipExtension = useShowVoipExtension(); const { avatar, username, setRandomPassword, password, name: userFullName } = watch(); @@ -341,7 +341,7 @@ const AdminUserForm = ({ userData, onReload, context, refetchUserFormData, roleD )} - {canManageVoipExtension && ( + {showVoipExtension && ( {t('Voice_call_extension')} diff --git a/apps/meteor/client/views/admin/users/UsersTable/UsersTable.tsx b/apps/meteor/client/views/admin/users/UsersTable/UsersTable.tsx index 549539ebbfe..56077c49125 100644 --- a/apps/meteor/client/views/admin/users/UsersTable/UsersTable.tsx +++ b/apps/meteor/client/views/admin/users/UsersTable/UsersTable.tsx @@ -20,7 +20,7 @@ import UsersTableFilters from './UsersTableFilters'; import UsersTableRow from './UsersTableRow'; import GenericNoResults from '../../../../components/GenericNoResults'; import type { AdminUsersTab, UsersFilters, UsersTableSortingOption } from '../AdminUsersPage'; -import { useVoipExtensionPermission } from '../useVoipExtensionPermission'; +import { useShowVoipExtension } from '../useShowVoipExtension'; type UsersTableProps = { tab: AdminUsersTab; @@ -58,7 +58,7 @@ const UsersTable = ({ const isMobile = !breakpoints.includes('xl'); const isLaptop = !breakpoints.includes('xxl'); - const canManageVoipExtension = useVoipExtensionPermission(); + const showVoipExtension = useShowVoipExtension(); const { current, itemsPerPage, setCurrent, setItemsPerPage, ...paginationProps } = paginationData; const isKeyboardEvent = (event: MouseEvent | KeyboardEvent): event is KeyboardEvent => { @@ -137,7 +137,7 @@ const UsersTable = ({ {t('Pending_action')} ), - tab === 'all' && canManageVoipExtension && ( + tab === 'all' && showVoipExtension && ( , ], - [sortData, t, isLaptop, tab, isMobile, canManageVoipExtension], + [sortData, t, isLaptop, tab, isMobile, showVoipExtension], ); return ( @@ -195,7 +195,7 @@ const UsersTable = ({ isMobile={isMobile} isLaptop={isLaptop} isSeatsCapExceeded={isSeatsCapExceeded} - showVoipExtension={canManageVoipExtension} + showVoipExtension={showVoipExtension} onReload={onReload} onClick={handleClickOrKeyDown} /> diff --git a/apps/meteor/client/views/admin/users/useShowVoipExtension.tsx b/apps/meteor/client/views/admin/users/useShowVoipExtension.tsx new file mode 100644 index 00000000000..d1137f5ec7c --- /dev/null +++ b/apps/meteor/client/views/admin/users/useShowVoipExtension.tsx @@ -0,0 +1,7 @@ +import { useSetting } from '@rocket.chat/ui-contexts'; + +export const useShowVoipExtension = () => { + const isVoipSettingEnabled = useSetting('VoIP_TeamCollab_Enabled', false); + + return isVoipSettingEnabled; +}; diff --git a/apps/meteor/client/views/admin/users/useVoipExtensionPermission.tsx b/apps/meteor/client/views/admin/users/useVoipExtensionPermission.tsx deleted file mode 100644 index f29e8f04585..00000000000 --- a/apps/meteor/client/views/admin/users/useVoipExtensionPermission.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import { useSetting, usePermission } from '@rocket.chat/ui-contexts'; - -export const useVoipExtensionPermission = () => { - const isVoipSettingEnabled = useSetting('VoIP_TeamCollab_Enabled', false); - const canManageVoipExtensions = usePermission('manage-voip-extensions'); - - return isVoipSettingEnabled && canManageVoipExtensions; -}; diff --git a/apps/meteor/server/startup/migrations/index.ts b/apps/meteor/server/startup/migrations/index.ts index 0792a9b5114..d9ba2136aa9 100644 --- a/apps/meteor/server/startup/migrations/index.ts +++ b/apps/meteor/server/startup/migrations/index.ts @@ -33,5 +33,6 @@ import './v324'; import './v325'; import './v326'; import './v327'; +import './v328'; export * from './xrun'; diff --git a/apps/meteor/server/startup/migrations/v328.ts b/apps/meteor/server/startup/migrations/v328.ts new file mode 100644 index 00000000000..d5bd45a4ea1 --- /dev/null +++ b/apps/meteor/server/startup/migrations/v328.ts @@ -0,0 +1,15 @@ +import { Permissions } from '@rocket.chat/models'; + +import { addMigration } from '../../lib/migrations'; + +addMigration({ + version: 328, + name: 'Remove Old Voip Permissions', + async up() { + await Permissions.deleteMany({ + _id: { + $in: ['manage-voip-extensions', 'view-user-voip-extension', 'view-voip-extension-details'], + }, + }); + }, +}); diff --git a/apps/meteor/tests/end-to-end/api/users.ts b/apps/meteor/tests/end-to-end/api/users.ts index 1cbcfaeb100..b4563cffc03 100644 --- a/apps/meteor/tests/end-to-end/api/users.ts +++ b/apps/meteor/tests/end-to-end/api/users.ts @@ -580,12 +580,10 @@ describe('[Users]', () => { (IS_EE ? describe : describe.skip)('Voice call extension', () => { beforeEach(async () => { await updateSetting('VoIP_TeamCollab_Enabled', true); - await updatePermission('manage-voip-extensions', ['admin']); }); after(async () => { await updateSetting('VoIP_TeamCollab_Enabled', true); - await updatePermission('manage-voip-extensions', ['admin']); }); it('should create a user with a voice call extension', async () => { @@ -668,30 +666,6 @@ describe('[Users]', () => { expect(res.body).to.have.property('errorType', 'error-action-not-allowed'); }); }); - - it('should not create a user if user has no permission to manage voip extensions', async () => { - await updatePermission('manage-voip-extensions', []); - await request - .post(api('users.create')) - .set(credentials) - .send({ - email: 'fail_no_permission@rocket.chat', - name: 'fail_no_permission', - username: 'fail_no_permission', - password, - active: true, - roles: ['user'], - joinDefaultChannels: true, - verified: true, - freeSwitchExtension: '999', - }) - .expect('Content-Type', 'application/json') - .expect(400) - .expect((res) => { - expect(res.body).to.have.property('success', false); - expect(res.body).to.have.property('errorType', 'error-action-not-allowed'); - }); - }); }); describe('default email2fa auto opt in configuration', () => { @@ -2556,15 +2530,11 @@ describe('[Users]', () => { }); after(async () => { - await Promise.all([ - deleteUser(user), - updateSetting('VoIP_TeamCollab_Enabled', true), - updatePermission('manage-voip-extensions', ['admin']), - ]); + await Promise.all([deleteUser(user), updateSetting('VoIP_TeamCollab_Enabled', true)]); }); beforeEach(async () => { - await Promise.all([updatePermission('manage-voip-extensions', ['admin']), updateSetting('VoIP_TeamCollab_Enabled', true)]); + await Promise.all([updateSetting('VoIP_TeamCollab_Enabled', true)]); }); it("should update the user's voice call extension", async () => { @@ -2601,20 +2571,6 @@ describe('[Users]', () => { }); }); - it("should not update the user's voice call extension if the user has no permission to manage voip extensions", async () => { - await updatePermission('manage-voip-extensions', []); - await request - .post(api('users.update')) - .set(credentials) - .send({ - userId: user._id, - data: { - freeSwitchExtension: '9998', - }, - }) - .expect(400); - }); - it("should not update the user's voice call extension if voip setting is disabled", async () => { await updateSetting('VoIP_TeamCollab_Enabled', false); await request diff --git a/packages/i18n/src/locales/en.i18n.json b/packages/i18n/src/locales/en.i18n.json index e1f1d263d5d..0cb6990495c 100644 --- a/packages/i18n/src/locales/en.i18n.json +++ b/packages/i18n/src/locales/en.i18n.json @@ -6478,8 +6478,6 @@ "manage-the-app": "Manage the App", "manage-user-status": "Manage User Status", "manage-user-status_description": "Permission to manage the server custom user statuses", - "manage-voip-extensions": "Manage Voice Calls", - "manage-voip-extensions_description": "Permission to manage voice calls and assign extensions to users", "marketplace_featured_section_community_featured": "Featured Community Apps", "marketplace_featured_section_community_supported": "Community Supported Apps", "marketplace_featured_section_enterprise": "Featured Enterprise Apps", @@ -7020,10 +7018,6 @@ "view-statistics_description": "Permission to view system statistics such as number of users logged in, number of rooms, operating system information", "view-user-administration": "View User Administration", "view-user-administration_description": "Permission to partial, read-only list view of other user accounts currently logged into the system. No user account information is accessible with this permission", - "view-user-voip-extension": "Allow Voice Calls", - "view-user-voip-extension_description": "Permission to allow users to use the voice call feature", - "view-voip-extension-details": "View Voice Call Extensions", - "view-voip-extension-details_description": "Permission to view which user is calling and their extension info", "webdav-account-saved": "WebDAV account saved", "webdav-account-updated": "WebDAV account updated", "webdav-server-not-found": "WebDAV server not found", diff --git a/packages/i18n/src/locales/nb.i18n.json b/packages/i18n/src/locales/nb.i18n.json index eaf6a0b084c..8052ed05387 100644 --- a/packages/i18n/src/locales/nb.i18n.json +++ b/packages/i18n/src/locales/nb.i18n.json @@ -6313,8 +6313,6 @@ "manage-the-app": "Administrer appen", "manage-user-status": "Administrer brukerstatus", "manage-user-status_description": "Tillatelse til å administrere serverens egendefinerte brukerstatuser", - "manage-voip-extensions": "Administrer taleanrop", - "manage-voip-extensions_description": "Tillatelse til å administrere taleanrop og tildele utvidelser til brukere", "marketplace_featured_section_community_featured": "Utvalgte fellesskapsapper", "marketplace_featured_section_community_supported": "Apper som støttes av fellesskapet", "marketplace_featured_section_enterprise": "Utvalgte bedriftsapper", @@ -6854,10 +6852,6 @@ "view-statistics_description": "Tillatelse til å se systemstatistikk som antall brukere pålogget, antall rom, operativsysteminformasjon", "view-user-administration": "Se brukeradministrasjon", "view-user-administration_description": "Tillatelse til delvis, skrivebeskyttet listevisning av andre brukerkontoer som for øyeblikket er logget på systemet. Ingen brukerkontoinformasjon er tilgjengelig med denne tillatelsen", - "view-user-voip-extension": "Tillat taleanrop", - "view-user-voip-extension_description": "Tillatelse til å la brukere bruke taleanropsfunksjonen", - "view-voip-extension-details": "Se taleanropsutvidelser", - "view-voip-extension-details_description": "Tillatelse til å se hvilken bruker som ringer og deres internnummer", "webdav-account-saved": "WebDAV-konto lagret", "webdav-account-updated": "WebDAV-konto oppdatert", "webdav-server-not-found": "WebDAV-server ble ikke funnet", diff --git a/packages/i18n/src/locales/nn.i18n.json b/packages/i18n/src/locales/nn.i18n.json index 9309f54ade4..011342f75a8 100644 --- a/packages/i18n/src/locales/nn.i18n.json +++ b/packages/i18n/src/locales/nn.i18n.json @@ -5748,8 +5748,6 @@ "manage-the-app": "Administrer appen", "manage-user-status": "Administrer brukerstatus", "manage-user-status_description": "Tillatelse til å administrere serverens egendefinerte brukerstatuser", - "manage-voip-extensions": "Administrer taleanrop", - "manage-voip-extensions_description": "Tillatelse til å administrere taleanrop og tildele utvidelser til brukere", "marketplace_featured_section_community_featured": "Utvalgte fellesskapsapper", "marketplace_featured_section_community_supported": "Apper som støttes av fellesskapet", "marketplace_featured_section_enterprise": "Utvalgte bedriftsapper", @@ -6094,10 +6092,6 @@ "view-statistics_description": "Tillatelse til å vise systemstatistikk som antall brukere logget inn, antall rom, operativsysteminformasjon", "view-user-administration": "Se Brukeradministrasjon", "view-user-administration_description": "Tillatelse til delvis, skrivebeskyttet listevisning av andre brukerkontoer som for øyeblikket er logget inn i systemet. Ingen brukerkontoinformasjon er tilgjengelig med denne tillatelsen", - "view-user-voip-extension": "Tillat taleanrop", - "view-user-voip-extension_description": "Tillatelse til å la brukere bruke taleanropsfunksjonen", - "view-voip-extension-details": "Se taleanropsutvidelser", - "view-voip-extension-details_description": "Tillatelse til å se hvilken bruker som ringer og deres internnummer", "webdav-server-not-found": "WebDAV-server ble ikke funnet", "will_be_able_to": "vil kunne", "yesterday": "i går", diff --git a/packages/i18n/src/locales/pt-BR.i18n.json b/packages/i18n/src/locales/pt-BR.i18n.json index d8691677496..7347a8a0d2c 100644 --- a/packages/i18n/src/locales/pt-BR.i18n.json +++ b/packages/i18n/src/locales/pt-BR.i18n.json @@ -6179,8 +6179,6 @@ "manage-the-app": "Gerencie o aplicativo", "manage-user-status": "Gerenciar status do usuário", "manage-user-status_description": "Permissão para gerenciar status de usuário personalizado do servidor", - "manage-voip-extensions": "Gerenciar chamadas de voz", - "manage-voip-extensions_description": "Permissão para gerenciar chamadas de voz e atribuir ramais aos usuários", "marketplace_featured_section_community_featured": "Aplicativos da comunidade em destaque", "marketplace_featured_section_community_supported": "Aplicativos com suporte da comunidade", "marketplace_featured_section_enterprise": "Aplicativos Enterprise em destaque", @@ -6716,10 +6714,6 @@ "view-statistics_description": "Permissão para visualizar as estatísticas do sistema, como número de usuários logados, número de salas, informações do sistema operacional", "view-user-administration": "Ver administração do usuário", "view-user-administration_description": "Permissão para exibição de lista parcial, somente de leitura, de outras contas de usuário atualmente conectados no sistema. Nenhuma informação da conta do usuário é acessível com esta permissão", - "view-user-voip-extension": "Permitir chamadas de voz", - "view-user-voip-extension_description": "Permissão para permitir que os usuários usem o recurso de chamada de voz", - "view-voip-extension-details": "Exibir ramais de chamadas de voz", - "view-voip-extension-details_description": "Permissão para visualizar o usuário que está ligando e as informações do ramal", "webdav-account-saved": "Conta WebDAV salva", "webdav-account-updated": "Conta WebDAV atualizada", "webdav-server-not-found": "Servidor WebDAV não encontrado", diff --git a/packages/i18n/src/locales/sv.i18n.json b/packages/i18n/src/locales/sv.i18n.json index 7e92717cad2..4260e4c7c85 100644 --- a/packages/i18n/src/locales/sv.i18n.json +++ b/packages/i18n/src/locales/sv.i18n.json @@ -6220,8 +6220,6 @@ "manage-the-app": "Hantera appen", "manage-user-status": "Hantera användarstatus", "manage-user-status_description": "Behörighet att hantera anpassade användarstatusar för servern", - "manage-voip-extensions": "Hantera röstsamtal", - "manage-voip-extensions_description": "Behörighet att hantera röstsamtal och tilldela anknytningar till användare", "marketplace_featured_section_community_featured": "Utvalda communityappar", "marketplace_featured_section_community_supported": "Appar som stöds av communityn", "marketplace_featured_section_enterprise": "Utvalda Enterprise-sappar", @@ -6756,10 +6754,6 @@ "view-statistics_description": "Tillstånd att visa systemstatistik som antal användare inloggade, antal rum, operativsystemsinformation", "view-user-administration": "Visa användaradministration", "view-user-administration_description": "Tillstånd till delvis, skrivskyddad listvy över andra användarkonton som för närvarande är inloggade i systemet. Ingen användarkontoinformation är tillgänglig med detta tillstånd", - "view-user-voip-extension": "Tillåt röstsamtal", - "view-user-voip-extension_description": "Tillstånd att tillåta användare att använda röstsamtalsfunktionen", - "view-voip-extension-details": "Visa anknytningar för röstsamtal", - "view-voip-extension-details_description": "Behörighet att se vilken användare som ringer och deras anknytningsinformation", "webdav-account-saved": "WebDAV-kontot har sparats", "webdav-account-updated": "WebDAV-kontot har uppdaterats", "webdav-server-not-found": "WebDAV-servern hittades inte",