diff --git a/core/modules/file/lib/Drupal/file/Entity/File.php b/core/modules/file/lib/Drupal/file/Entity/File.php index 816435b..f6616b9 100644 --- a/core/modules/file/lib/Drupal/file/Entity/File.php +++ b/core/modules/file/lib/Drupal/file/Entity/File.php @@ -21,6 +21,7 @@ * id = "file", * label = @Translation("File"), * controllers = { + * "access" = "Drupal\file\FileAccessController", * "storage" = "Drupal\file\FileStorageController", * "view_builder" = "Drupal\Core\Entity\EntityViewBuilder" * }, diff --git a/core/modules/file/lib/Drupal/file/FileAccessController.php b/core/modules/file/lib/Drupal/file/FileAccessController.php new file mode 100644 index 0000000..87267d4 --- /dev/null +++ b/core/modules/file/lib/Drupal/file/FileAccessController.php @@ -0,0 +1,34 @@ +getFileUri()) == 'public')) { + return TRUE; + } + else { + return parent::checkAccess($entity, $operation, $langcode, $account); + } + } + +} diff --git a/core/tests/Drupal/Tests/Core/File/FileAccessCheckTest.php b/core/tests/Drupal/Tests/Core/File/FileAccessCheckTest.php new file mode 100644 index 0000000..5f367a6 --- /dev/null +++ b/core/tests/Drupal/Tests/Core/File/FileAccessCheckTest.php @@ -0,0 +1,84 @@ + 'File Entity access check test', + 'description' => 'Unit test of file entity access.', + 'group' => 'File' + ); + } + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(); + + $this->moduleHandler = $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface'); + $this->moduleHandler->expects($this->at(0)) + ->method('invokeAll') + ->with('entity_access') + ->will($this->returnValue(array())); + + $this->moduleHandler->expects($this->at(1)) + ->method('invokeAll') + ->with('_access') + ->will($this->returnValue(array())); + + $this->container = new ContainerBuilder(); + $this->container->set('module_handler', $this->moduleHandler); + \Drupal::setContainer($this->container); + } + + /** + * Tests the method for checking access to a file entity. + */ + public function testAccess() { + + // Mock a user. + $account = $this->getMock('Drupal\Core\Session\AccountInterface'); + + // Mock an entity manager. + $entity_manager = $this->getMock('Drupal\Core\Entity\EntityTypeInterface'); + + // Mock a 'file' entity. + $file = $this->getMockBuilder('Drupal\file\Entity\File') + ->disableOriginalConstructor() + ->getMock(); + + // Initialize the controller to test. + $controller = new FileAccessController($entity_manager); + + // Test the access method. + //print_r($file); + $this->assertSame($controller->access($file, 'view', 'und', $account), TRUE); + } +} + +} + +namespace { + if (!function_exists('file_uri_scheme')) { + function file_uri_scheme($uri) { + return 'public'; + } + } +} \ No newline at end of file