Filter dashboard custom post listing by user

pre_get_posts is correct.

the code from will prevent any non-admin from seeing anyone else’s posts.

http://blog.rutwick.com/display-only-the-posts-authored-by-the-current-wp-user-on-the-posts-page-in-the-back-end

to limit that to only 1 post type you’d add in one more condition and check $typenow == ‘your_custom_post_type’:

add_action('pre_get_posts', 'filter_posts_list');
function filter_posts_list($query)
{
    //$pagenow holds the name of the current page being viewed
     global $pagenow, $typenow;  

    //$current_user uses the get_currentuserinfo() method to get the currently logged in user's data
     global $current_user;
     get_currentuserinfo();

        //Shouldn't happen for the admin, but for any role with the edit_posts capability and only on the posts list page, that is edit.php
        if(!current_user_can('administrator') && current_user_can('edit_posts') && ('edit.php' == $pagenow) &&  $typenow == 'your_custom_post_type')
     { 
        //global $query's set() method for setting the author as the current user's id
        $query->set('author', $current_user->ID);
        }
}