Allow a user or role to view drafts and previews, but not other admin privileges?

Figured out an easier way. I gave them the edit_other_posts and edit_other_pages role capabilities, and then blocked their access to the admin area using the following:

add_action( 'init', 'eri_block_nonadmins_init' );
function eri_block_nonadmins_init() {
    $current_url = eri_get_current_url( true, false);
    if ( (!current_user_can( 'administrator' ) && !( defined( 'DOING_AJAX' ) && DOING_AJAX )) 
        && (is_admin() || $current_url == '/cornerstone/') ) {
        wp_redirect( home_url() );
        exit;
    }
}

Of course, I also blocked them from gaining access to our Cornerstone front-end editor.

If you’re interested in what the eri_get_current_url() function does:

function eri_get_current_url( $params = true, $domain = true ){
    if ($domain) {
        $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http';
        $domain = $protocol."://$_SERVER[HTTP_HOST]";
    } else {
        $domain = '';
    }

    $full_url = $domain.$_SERVER['REQUEST_URI'];

    if (!$params) {
        return strtok($full_url, '?');
    } else {
        return $full_url;
    }
}