function isSmartScopeSufficientForBulkDataAccess()

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
    );
}