RocketChat/Rocket.Chat

View on GitHub
apps/meteor/ee/app/livechat-enterprise/server/permissions.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { Permissions, Roles } from '@rocket.chat/models';

import { createOrUpdateProtectedRoleAsync } from '../../../../server/lib/roles/createOrUpdateProtectedRole';

const livechatMonitorRole = 'livechat-monitor';
const livechatManagerRole = 'livechat-manager';
const adminRole = 'admin';
const livechatAgentRole = 'livechat-agent';

export const omnichannelEEPermissions = [
    { _id: 'manage-livechat-units', roles: [adminRole, livechatManagerRole] },
    { _id: 'manage-livechat-monitors', roles: [adminRole, livechatManagerRole] },
    { _id: 'manage-livechat-tags', roles: [adminRole, livechatManagerRole] },
    { _id: 'manage-livechat-priorities', roles: [adminRole, livechatManagerRole] },
    { _id: 'manage-livechat-sla', roles: [adminRole, livechatManagerRole] },
    { _id: 'manage-livechat-canned-responses', roles: [adminRole, livechatManagerRole, livechatMonitorRole] },
    { _id: 'spy-voip-calls', roles: [adminRole, livechatManagerRole, livechatMonitorRole] },
    { _id: 'outbound-voip-calls', roles: [adminRole, livechatManagerRole] },
    { _id: 'request-pdf-transcript', roles: [adminRole, livechatManagerRole, livechatMonitorRole, livechatAgentRole] },
    { _id: 'view-livechat-reports', roles: [adminRole, livechatManagerRole, livechatMonitorRole] },
];

export const createPermissions = async (): Promise<void> => {
    const monitorRole = await Roles.findOneById(livechatMonitorRole, { projection: { _id: 1 } });
    if (!monitorRole) {
        await createOrUpdateProtectedRoleAsync(livechatMonitorRole, {
            name: livechatMonitorRole,
        });
    }

    await Promise.all(omnichannelEEPermissions.map(async (permission) => Permissions.create(permission._id, permission.roles)));
};