How to create restrict content to users (by user, not by role)

What we can do here is to create a meta box for each post, and assign a user to it. Then, on our post page, check whether the current user is related to the post or not.

If they are not related to it, then redirect them back to homepage or somewhere else.

I’m going to use a drop-down for the meta box, and fill it with users.

// Hook into the add_meta_boxes action
add_action( 'add_meta_boxes', 'kreigd_user_metabox' );
function kreigd_user_metabox() {
    // Create a new metabox
    add_meta_box( 
        'kreigd-user-list',         // ID
        'User List',                // Title
        'kreigd_user_list_callback',    // Callback
        array('post','page'),       // Post types
        'normal', 
        'high' 
    );
}
// Output the content for metabox
function kreigd_user_list_callback() {
    // $post is already set, and contains an object: the WordPress post
    global $post;
    $values = get_post_custom( get_the_ID() );
    // Get the current assigned user
    $user_id = isset( $values['user_id'][0] ) ? $values['user_id'][0] : 0;

    // We'll use this nonce field later on when saving.
    wp_nonce_field( 'kreigd_nonce', 'kreigd_user_list_nonce' );?>
    <p>
        <label for="kreigd_select"><?php _e('Choose a user','text-domain'); ?></label>
        <select name="kreigd_select" id="kreigd_select"><?php 
            $users = get_users(); // Retrieve a list of users
            // Run a loop and add every user to the list
            foreach ( $users as $user ){ ?>
                <option 
                    value="<?php echo esc_html( $user->ID ); ?>"
                    <?php selected( $user->ID, $user_id ); ?>
                >
                    <?php echo esc_html( $user->display_name ); ?>
                </option><?php 
            } ?>
        </select>
    </p><?php    
}
// Save the user to meta box on post save
add_action( 'save_post', 'mymovieflaws_meta_box_save' );
function mymovieflaws_meta_box_save( $post_id ){
    // Don't save it on autosave
    if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
        return;
    // If the nonce is not correct, or the value is not set, return
    if( !isset( $_POST['kreigd_select'] ) || !wp_verify_nonce( $_POST['kreigd_user_list_nonce'], 'kreigd_nonce' ) ) 
        return;
    // If current user doesn't have the privilege to save a post, return
    if( !current_user_can( 'edit_post', $post_id ) ) 
        return;
    $allowed = array( 'a' => array( 'href' => array() ) );
    // Save the user's ID
    update_post_meta( $post_id, 'user_id', wp_kses( $_POST['kreigd_select'], $allowed ) );      
}

You can utilize this by using the bootstrap select, and add search option to your selector. This way you can quickly find each user, without having to go through the whole list.