From 579a586a03ccef4396a20d750d783a74bcae46d6 Mon Sep 17 00:00:00 2001 From: Hoan Luu Huu <110280845+xquanluu@users.noreply.github.com> Date: Fri, 30 May 2025 18:24:55 +0700 Subject: [PATCH] fixed filter for carriers for an account (#460) * fixed filter for carriers for an account * wip * wip --- lib/models/voip-carrier.js | 11 ++++++++--- lib/routes/api/phone-numbers.js | 7 ++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/models/voip-carrier.js b/lib/models/voip-carrier.js index 6fee2c6..7a31d96 100644 --- a/lib/models/voip-carrier.js +++ b/lib/models/voip-carrier.js @@ -12,10 +12,15 @@ class VoipCarrier extends Model { static _criteriaBuilder(obj, args) { let sql = ''; if (obj.account_sid) { - sql += ' AND vc.account_sid = ?'; + // carrier belong to an account when + // 1. account_sid is set + // 2. account_sid is null and service_provider_sid matches the account's service_provider_sid + sql += ` AND (vc.account_sid = ? OR + (vc.account_sid IS NULL AND vc.service_provider_sid IN + (SELECT service_provider_sid FROM accounts WHERE account_sid = ?)) + )`; + args.push(obj.account_sid); args.push(obj.account_sid); - } else { - sql += ' AND vc.account_sid IS NULL'; } if (obj.service_provider_sid) { sql += ' AND vc.service_provider_sid = ?'; diff --git a/lib/routes/api/phone-numbers.js b/lib/routes/api/phone-numbers.js index 8180248..16dbd63 100644 --- a/lib/routes/api/phone-numbers.js +++ b/lib/routes/api/phone-numbers.js @@ -97,13 +97,18 @@ decorate(router, PhoneNumber, ['add', 'update', 'delete'], preconditions); /* list */ router.get('/', async(req, res) => { const logger = req.app.locals.logger; - const {account_sid: query_account_sid, filter, page, page_size} = req.query; + const {service_provider_sid: query_service_provider_sid, + account_sid: query_account_sid, filter, page, page_size} = req.query; const isPaginationRequest = page !== null && page !== undefined; let service_provider_sid = null, account_sid = query_account_sid; if (req.user.hasAccountAuth) { account_sid = req.user.account_sid; } else if (req.user.hasServiceProviderAuth) { service_provider_sid = req.user.service_provider_sid; + } else { + // admin user can query all phone numbers + service_provider_sid = query_service_provider_sid; + account_sid = query_account_sid; } try { let total = 0;