Index: src/wp-includes/user.php
===================================================================
--- src/wp-includes/user.php	(revision 37322)
+++ src/wp-includes/user.php	(working copy)
@@ -578,6 +578,24 @@
 	if ( empty( $user_id ) )
 		return array();
 
+	/**
+	 * Filter the list of a user's sites before it is populated.
+	 *
+	 * Returning a populated array effectively short circuits `get_blogs_of_user()`.
+	 *
+	 * @since 4.6.0
+	 *
+	 * @param array $blogs   An array of WP_Site objects of which the user is a member. Default is an empty array.
+	 * @param int   $user_id User ID.
+	 * @param bool  $all     Whether the returned array should contain all sites, including
+	 *                       those marked 'deleted', 'archived', or 'spam'. Default false.
+	 */
+	$blogs = apply_filters( 'pre_get_blogs_of_user', array(), $user_id, $all );
+
+	if ( is_array( $blogs ) && 0 < count( $blogs ) ) {
+		return $blogs;
+	}
+
 	$keys = get_user_meta( $user_id );
 	if ( empty( $keys ) )
 		return array();
