draft post and publish post manage

Sure it is – you can use the wp_insert_post_data filter:

function no_going_back_to_draft($slashed_data , $post_data) {
    if($slashed_data['post_status'] == 'draft') { // we're only interested in posts being saved as "drafts"
        $user = wp_get_current_user();
        if ( in_array( 'no-going-back-to-draft-role', (array) $user->roles ) ) { // we're only interested in users with that special, restricted role
            $post = get_post($post_data['ID']);
            if(
                $post && // if $post == null, it's a new post, so it's definitely never been published yet...
                ($post->post_status != 'draft') // so *any other status* but draft can't be brought back to "draft" by this partuclar user
            ) {
                $slashed_data['post_status'] = $post->post_status; // override the post's status: set it to the current value in the db
            }
        }
    }
    return $slashed_data;
}
add_action( 'wp_insert_post_data', 'no_going_back_to_draft', 10, 2 );

Hope this helps!