diff --git a/core/modules/field_ui/field_ui.install b/core/modules/field_ui/field_ui.install new file mode 100644 index 0000000..66ab207 --- /dev/null +++ b/core/modules/field_ui/field_ui.install @@ -0,0 +1,43 @@ + array( + 'administer comment fields', + 'administer comment display', + ), + 'administer content types' => array( + 'administer node fields', + 'administer node display', + ), + 'administer users' => array( + 'administer user fields', + 'administer user display', + ), + 'administer taxonomy' => array( + 'administer taxonomy_term fields', + 'administer taxonomy_term display', + ), + ); + + $all_roles_permissions = user_role_permissions(user_roles()); + foreach ($all_roles_permissions as $role_id => $role_permissions) { + $new_permissions = array(); + foreach ($permissions as $entity_permission => $field_ui_permissions) { + if (isset($role_permissions[$entity_permission])) { + $new_permissions = array_merge($new_permissions, $field_ui_permissions); + } + } + if (!empty($new_permissions)) { + user_role_grant_permissions($role_id, $new_permissions); + } + } +} diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/FieldAPIUpgradePathTest.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/FieldAPIUpgradePathTest.php new file mode 100644 index 0000000..37add13 --- /dev/null +++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/FieldAPIUpgradePathTest.php @@ -0,0 +1,76 @@ + 'Field API upgrade test', + 'description' => 'Upgrade tests for Field API and Field UI.', + 'group' => 'Upgrade path', + ); + } + + public function setUp() { + $this->databaseDumpFiles = array( + drupal_get_path('module', 'system') . '/tests/upgrade/drupal-7.filled.standard_all.database.php.gz', + drupal_get_path('module', 'system') . '/tests/upgrade/drupal-7.field_api.database.php', + ); + parent::setUp(); + } + + /** + * Tests Field UI permissions upgrade path. + * + * Test that after upgrade users who have the 'administer comments', + * 'administer content types', 'administer users', and 'administer taxonomy' + * permission still have access to the manage field and display screens of + * those entities. + */ + function testFieldUIPermissions() { + $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.'); + + $permissions = array( + 'administer comments' => array( + 'administer comment fields', + 'administer comment display', + ), + 'administer content types' => array( + 'administer node fields', + 'administer node display', + ), + 'administer users' => array( + 'administer user fields', + 'administer user display', + ), + 'administer taxonomy' => array( + 'administer taxonomy_term fields', + 'administer taxonomy_term display', + ), + ); + + $role_permissions = user_role_permissions(array($this->normal_role_id => $this->normal_role_name, $this->admin_role_id => $this->admin_role_name)); + foreach ($permissions as $entity_permission => $field_ui_permissions) { + $this->assertFalse(isset($role_permissions[$this->normal_role_id][$entity_permission]), format_string('%role_name does not have the %permission permission', array('%role_name' => $this->normal_role_name, '%permission' => $entity_permission))); + $this->assertTrue(isset($role_permissions[$this->admin_role_id][$entity_permission]), format_string('%role_name has the %permission permission', array('%role_name' => $this->admin_role_name, '%permission' => $entity_permission))); + foreach ($field_ui_permissions as $field_ui_permission) { + $this->assertFalse(isset($role_permissions[$this->normal_role_id][$field_ui_permission]), format_string('%role_name does not have the %permission permission', array('%role_name' => $this->normal_role_name, '%permission' => $field_ui_permission))); + $this->assertTrue(isset($role_permissions[$this->admin_role_id][$field_ui_permission]), format_string('%role_name has the %permission permission', array('%role_name' => $this->admin_role_name, '%permission' => $field_ui_permission))); + } + } + } +} diff --git a/core/modules/system/tests/upgrade/drupal-7.field_api.database.php b/core/modules/system/tests/upgrade/drupal-7.field_api.database.php new file mode 100644 index 0000000..cd1124b --- /dev/null +++ b/core/modules/system/tests/upgrade/drupal-7.field_api.database.php @@ -0,0 +1,59 @@ +fields(array( + 'rid', + 'name', + 'weight', +)) +->values(array( + 'rid' => '4', + 'name' => 'Normal role', + 'weight' => '3', +)) +->values(array( + 'rid' => '5', + 'name' => 'Admin role', + 'weight' => '4', +)) +->execute(); + +// Add the 'Administer comments', 'Administer content types', +// 'Administer users' and 'Administer vocabularies and terms' permissions +// to the Admin role. +db_insert('role_permission')->fields(array( + 'rid', + 'permission', + 'module', +)) +->values(array( + 'rid' => '5', + 'permission' => 'administer comments', + 'module' => 'comment', +)) +->values(array( + 'rid' => '5', + 'permission' => 'administer content types', + 'module' => 'node', +)) +->values(array( + 'rid' => '5', + 'permission' => 'administer users', + 'module' => 'user', +)) +->values(array( + 'rid' => '5', + 'permission' => 'administer taxonomy', + 'module' => 'taxonomy', +)) +->execute();