diff --git a/modules/damopen_common/src/Plugin/Block/HeaderMenuBlock.php b/modules/damopen_common/src/Plugin/Block/HeaderMenuBlock.php index a7b5056..6a1ebb7 100644 --- a/modules/damopen_common/src/Plugin/Block/HeaderMenuBlock.php +++ b/modules/damopen_common/src/Plugin/Block/HeaderMenuBlock.php @@ -71,7 +71,7 @@ public function build() { ->accessCheck(TRUE); $count = $query->count()->execute(); $menu['manage_assets'] = [ - 'title' => new TranslatableMarkup('Assets waiting for approval'), + 'title' => new TranslatableMarkup('My Assets waiting for approval'), 'url' => Url::fromRoute('view.unpublished_assets.user_unpublished_assets')->toString(), 'class' => '', 'count' => $count, diff --git a/modules/media_collection/media_collection.services.yml b/modules/media_collection/media_collection.services.yml index a2e10e6..b90b4ab 100644 --- a/modules/media_collection/media_collection.services.yml +++ b/modules/media_collection/media_collection.services.yml @@ -62,3 +62,14 @@ services: class: Drupal\media_collection\Service\FileSizeCalculator arguments: - '@cache.default' + + media_collection.view_route_subscriber: + class: Drupal\media_collection\Routing\MediaCollectionRouteSubscriber + tags: + - { name: event_subscriber } + + media_collection.view_access_check: + class: Drupal\media_collection\Access\MediaCollectionViewAccess + arguments: ['@entity_type.manager'] + tags: + - { name: access_check } diff --git a/modules/media_collection/src/Access/MediaCollectionViewAccess.php b/modules/media_collection/src/Access/MediaCollectionViewAccess.php new file mode 100644 index 0000000..d29f682 --- /dev/null +++ b/modules/media_collection/src/Access/MediaCollectionViewAccess.php @@ -0,0 +1,50 @@ +entityTypeManager = $entity_type_manager; + } + + /** + * {@inheritdoc} + */ + public function access(AccountInterface $account, Route $route) { + $parts = explode('/', \Drupal::request()->getRequestUri()); + $media_collection = $parts[2]; + $collection = $this->entityTypeManager->getStorage('media_collection')->load($media_collection); + + if ($collection) { + if ($collection->getOwnerId() === $account->id()) { + return AccessResult::allowed(); + } + $shared_with = $collection->get('shared_with')->getValue(); + return AccessResult::allowedIf(in_array(['target_id' => $account->id()], $shared_with)); + } + return AccessResult::forbidden(); + } +} diff --git a/modules/media_collection/src/Routing/MediaCollectionRouteSubscriber.php b/modules/media_collection/src/Routing/MediaCollectionRouteSubscriber.php new file mode 100644 index 0000000..c0c0255 --- /dev/null +++ b/modules/media_collection/src/Routing/MediaCollectionRouteSubscriber.php @@ -0,0 +1,24 @@ +get('view.collection_view_page.collection_view')) { + $route->setRequirement('_custom_access', 'media_collection.view_access_check::access'); + } + } + +} diff --git a/modules/media_collection_share/media_collection_share.services.yml b/modules/media_collection_share/media_collection_share.services.yml index b9b6bce..c067bd0 100644 --- a/modules/media_collection_share/media_collection_share.services.yml +++ b/modules/media_collection_share/media_collection_share.services.yml @@ -23,7 +23,7 @@ services: - '@datetime.time' media_collection_share.access_check: - class: Drupal\media_collection_share\Access\MediaCollectionAccessCheck + class: Drupal\media_collection_share\Access\MediaCollectionShareAccessCheck arguments: ['@entity_type.manager'] tags: - { name: access_check, applies_to: _media_collection_owner_access } diff --git a/modules/media_collection_share/src/Access/MediaCollectionAccessCheck.php b/modules/media_collection_share/src/Access/MediaCollectionShareAccessCheck.php similarity index 94% rename from modules/media_collection_share/src/Access/MediaCollectionAccessCheck.php rename to modules/media_collection_share/src/Access/MediaCollectionShareAccessCheck.php index 032bbf4..86e4a4c 100644 --- a/modules/media_collection_share/src/Access/MediaCollectionAccessCheck.php +++ b/modules/media_collection_share/src/Access/MediaCollectionShareAccessCheck.php @@ -11,7 +11,7 @@ /** * Provides an access checker for media collections. */ -class MediaCollectionAccessCheck implements AccessInterface { +class MediaCollectionShareAccessCheck implements AccessInterface { /** * The entity type manager.