in src/smartScopeHelper.ts [83:110]
function isSmartScopeSufficientForBulkDataAccess(
bulkDataAuth: BulkDataAuth,
smartScope: ClinicalSmartScope,
scopeRule: ScopeRule,
isUserScopeAllowedForSystemExport: boolean,
) {
const { scopeType, accessType, resourceType } = smartScope;
const hasReadPermissions = getValidOperationsForScopeTypeAndAccessType(scopeType, accessType, scopeRule).includes(
'read',
);
const hasSufficientScopeType = isUserScopeAllowedForSystemExport
? ['system', 'user'].includes(scopeType)
: ['system'].includes(scopeType);
if (bulkDataAuth.operation === 'initiate-export') {
let bulkDataRequestHasCorrectScope = false;
if (bulkDataAuth.exportType === 'system') {
bulkDataRequestHasCorrectScope = hasSufficientScopeType && resourceType === '*' && hasReadPermissions;
} else if (bulkDataAuth.exportType === 'group') {
bulkDataRequestHasCorrectScope = ['system'].includes(scopeType) && hasReadPermissions;
}
return bulkDataRequestHasCorrectScope;
}
return (
['get-status-export', 'cancel-export'].includes(bulkDataAuth.operation) &&
hasSufficientScopeType &&
hasReadPermissions
);
}