diff --git src/wp-admin/includes/schema.php src/wp-admin/includes/schema.php
index b93fad35b4..ef4158c4dc 100644
--- src/wp-admin/includes/schema.php
+++ src/wp-admin/includes/schema.php
@@ -608,6 +608,7 @@ function populate_roles() {
 	populate_roles_270();
 	populate_roles_280();
 	populate_roles_300();
+	populate_roles_500();
 }
 
 /**
@@ -848,6 +849,83 @@ function populate_roles_300() {
 	}
 }
 
+/**
+ * Create and modify WordPress roles for WordPress 5.0.
+ *
+ * Assigns capabilities for reading and editing reusable blocks. Runs
+ * directly on the option to avoid updating the roles option 30+ times.
+ *
+ * @since 5.0.0
+ */
+function populate_roles_500() {
+	global $wp_user_roles, $wpdb;
+
+	if ( ! empty( $wp_user_roles ) ) {
+		// Roles and caps are not stored in the database.
+		return;
+	}
+
+	$site_id = get_current_blog_id();
+	$role_key = $wpdb->get_blog_prefix( $site_id ) . 'user_roles';
+	$roles_and_caps = get_option( $role_key, array() );
+
+	$editor_caps = array(
+		'edit_blocks',
+		'edit_others_blocks',
+		'publish_blocks',
+		'read_private_blocks',
+		'read_blocks',
+		'delete_blocks',
+		'delete_private_blocks',
+		'delete_published_blocks',
+		'delete_others_blocks',
+		'edit_private_blocks',
+		'edit_published_blocks',
+		'create_blocks',
+	);
+
+	$caps_map = array(
+		'administrator' => $editor_caps,
+		'editor'        => $editor_caps,
+		'author'        => array(
+			'edit_blocks',
+			'publish_blocks',
+			'read_blocks',
+			'delete_blocks',
+			'delete_published_blocks',
+			'edit_published_blocks',
+			'create_blocks',
+		),
+		'contributor'   => array(
+			'read_blocks',
+		),
+	);
+
+	foreach ( $caps_map as $role_name => $caps ) {
+		if ( ! isset( $roles_and_caps[ $role_name ] ) ) {
+			continue;
+		}
+		$role = $roles_and_caps[ $role_name ];
+
+		if ( empty( $role ) ) {
+			continue;
+		}
+
+		/*
+		 * Due to roles being created in the block editor feature plugin,
+		 * the presence needs to be checked before adding the role.
+		 */
+		foreach ( $caps as $cap ) {
+			if ( isset( $role['capabilities'][ $cap ] ) ) {
+				continue;
+			}
+			$roles_and_caps[ $role_name ]['capabilities'][ $cap ] = true;
+		}
+	}
+
+	update_option( $role_key, $roles_and_caps );
+}
+
 if ( !function_exists( 'install_network' ) ) :
 /**
  * Install Network.
diff --git src/wp-admin/includes/upgrade.php src/wp-admin/includes/upgrade.php
index f36d2d0c02..13c075b4c6 100644
--- src/wp-admin/includes/upgrade.php
+++ src/wp-admin/includes/upgrade.php
@@ -628,7 +628,7 @@ function upgrade_all() {
 	if ( $wp_current_db_version < 37965 )
 		upgrade_460();
 
-	if ( $wp_current_db_version < 43764 )
+	if ( $wp_current_db_version < 43824 )
 		upgrade_500();
 
 	maybe_disable_link_manager();
@@ -1815,6 +1815,10 @@ function upgrade_500() {
 		}
 		deactivate_plugins( array( 'gutenberg/gutenberg.php' ), true );
 	}
+
+	if ( $wp_current_db_version < 43824 ) {
+		populate_roles_500();
+	}
 }
 
 /**
diff --git src/wp-includes/capabilities.php src/wp-includes/capabilities.php
index 38bb4c6c6d..748d02907c 100644
--- src/wp-includes/capabilities.php
+++ src/wp-includes/capabilities.php
@@ -555,23 +555,6 @@ function map_meta_cap( $cap, $user_id ) {
 			return call_user_func_array( 'map_meta_cap', $args );
 		}
 
-		// Block capabilities map to their post equivalent.
-		$block_caps = array(
-			'edit_blocks',
-			'edit_others_blocks',
-			'publish_blocks',
-			'read_private_blocks',
-			'delete_blocks',
-			'delete_private_blocks',
-			'delete_published_blocks',
-			'delete_others_blocks',
-			'edit_private_blocks',
-			'edit_published_blocks',
-		);
-		if ( in_array( $cap, $block_caps, true ) ) {
-			$cap = str_replace( '_blocks', '_posts', $cap );
-		}
-
 		// If no meta caps match, return the original cap.
 		$caps[] = $cap;
 	}
diff --git src/wp-includes/post.php src/wp-includes/post.php
index c9d1edbe67..03189b89e1 100644
--- src/wp-includes/post.php
+++ src/wp-includes/post.php
@@ -261,14 +261,8 @@ function create_initial_post_types() {
 			'rest_controller_class' => 'WP_REST_Blocks_Controller',
 			'capability_type'       => 'block',
 			'capabilities'          => array(
-				// You need to be able to edit posts, in order to read blocks in their raw form.
-				'read'                   => 'edit_posts',
-				// You need to be able to publish posts, in order to create blocks.
-				'create_posts'           => 'publish_posts',
-				'edit_published_posts'   => 'edit_published_posts',
-				'delete_published_posts' => 'delete_published_posts',
-				'edit_others_posts'      => 'edit_others_posts',
-				'delete_others_posts'    => 'delete_others_posts',
+				'read'         => 'read_blocks',
+				'create_posts' => 'create_blocks',
 			),
 			'map_meta_cap'          => true,
 			'supports'              => array(
@@ -278,7 +272,6 @@ function create_initial_post_types() {
 		)
 	);
 
-
 	register_post_status( 'publish', array(
 		'label'       => _x( 'Published', 'post status' ),
 		'public'      => true,
diff --git src/wp-includes/version.php src/wp-includes/version.php
index ab321dd33a..cee49296ce 100644
--- src/wp-includes/version.php
+++ src/wp-includes/version.php
@@ -11,7 +11,7 @@ $wp_version = '5.0-beta2-43845-src';
  *
  * @global int $wp_db_version
  */
-$wp_db_version = 43764;
+$wp_db_version = 43824;
 
 /**
  * Holds the TinyMCE version
