Skip to content

Commit

Permalink
Initial refactor of revision provider and access
Browse files Browse the repository at this point in the history
Fix #323

Refactor the alert banner entitiy to use a more standard approach to revisions,
using \Drupal\Core\Entity\Routing\RevisionHtmlRouteProvider
instead of custom routes, and using standard revsion routes instead of custom
versions in routing.yml.

This also groups all the none view crud permissions into the manage alert
banner permission in alertBannerEntityAccessControlHandler.
  • Loading branch information
andybroomfield committed Jun 17, 2024
1 parent f2b9f4e commit bab53b1
Show file tree
Hide file tree
Showing 5 changed files with 11 additions and 422 deletions.
44 changes: 0 additions & 44 deletions localgov_alert_banner.routing.yml

This file was deleted.

11 changes: 5 additions & 6 deletions src/AlertBannerEntityAccessControlHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,17 @@ protected function checkAccess(EntityInterface $entity, $operation, AccountInter
return AccessResult::allowedIfHasPermission($account, 'view localgov alert banner ' . $entity_bundle . ' entities');

case 'update':

if ($account->hasPermission('manage all localgov alert banner entities')) {
return AccessResult::allowed();
}
return AccessResult::allowedIfHasPermission($account, 'manage localgov alert banner ' . $entity_bundle . ' entities');

case 'delete':
case 'view all revisions':
case 'view revision':
case 'delete revision':
case 'revert':

if ($account->hasPermission('manage all localgov alert banner entities')) {
return AccessResult::allowed();
}
return AccessResult::allowedIfHasPermission($account, 'manage localgov alert banner ' . $entity_bundle . ' entities');

}

// Unknown operation, no opinion.
Expand Down
197 changes: 0 additions & 197 deletions src/AlertBannerEntityHtmlRouteProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,34 +22,6 @@ public function getRoutes(EntityTypeInterface $entity_type) {

$entity_type_id = $entity_type->id();

if ($collection_route = $this->getCollectionRoute($entity_type)) {
$collection->add("entity.{$entity_type_id}.collection", $collection_route);
}

if ($history_route = $this->getHistoryRoute($entity_type)) {
$collection->add("entity.{$entity_type_id}.version_history", $history_route);
}

if ($revision_route = $this->getRevisionRoute($entity_type)) {
$collection->add("entity.{$entity_type_id}.revision", $revision_route);
}

if ($revert_route = $this->getRevisionRevertRoute($entity_type)) {
$collection->add("entity.{$entity_type_id}.revision_revert", $revert_route);
}

if ($delete_route = $this->getRevisionDeleteRoute($entity_type)) {
$collection->add("entity.{$entity_type_id}.revision_delete", $delete_route);
}

if ($translation_route = $this->getRevisionTranslationRevertRoute($entity_type)) {
$collection->add("{$entity_type_id}.revision_revert_translation_confirm", $translation_route);
}

if ($settings_form_route = $this->getSettingsFormRoute($entity_type)) {
$collection->add("{$entity_type_id}.settings", $settings_form_route);
}

if ($status_form_route = $this->getStatusFormRoute($entity_type)) {
$collection->add("entity.{$entity_type_id}.status_form", $status_form_route);
}
Expand Down Expand Up @@ -89,173 +61,4 @@ protected function getStatusFormRoute(EntityTypeInterface $entity_type) {
}
}

/**
* Gets the collection route.
*
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
* The entity type.
*
* @return \Symfony\Component\Routing\Route|null
* The generated route, if available.
*/
protected function getCollectionRoute(EntityTypeInterface $entity_type) {
if ($entity_type->hasLinkTemplate('collection')) {
$entity_type_id = $entity_type->id();
$route = new Route($entity_type->getLinkTemplate('collection'));
$route
->setDefaults([
'_entity_list' => $entity_type_id,
'_title' => "{$entity_type->getLabel()} list",
])
->setRequirement('_permission', 'access alert banner listing page')
->setOption('_admin_route', TRUE);

return $route;
}
}

/**
* Gets the version history route.
*
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
* The entity type.
*
* @return \Symfony\Component\Routing\Route|null
* The generated route, if available.
*/
protected function getHistoryRoute(EntityTypeInterface $entity_type) {
if ($entity_type->hasLinkTemplate('version-history')) {
$route = new Route($entity_type->getLinkTemplate('version-history'));
$route
->setDefaults([
'_title' => "{$entity_type->getLabel()} revisions",
'_controller' => '\Drupal\localgov_alert_banner\Controller\AlertBannerEntityController::revisionOverview',
])
->setRequirement('_entity_access', 'localgov_alert_banner.update')
->setOption('_admin_route', TRUE);

return $route;
}
}

/**
* Gets the revision route.
*
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
* The entity type.
*
* @return \Symfony\Component\Routing\Route|null
* The generated route, if available.
*/
protected function getRevisionRoute(EntityTypeInterface $entity_type) {
if ($entity_type->hasLinkTemplate('revision')) {
$route = new Route($entity_type->getLinkTemplate('revision'));
$route
->setDefaults([
'_controller' => '\Drupal\localgov_alert_banner\Controller\AlertBannerEntityController::revisionShow',
'_title_callback' => '\Drupal\localgov_alert_banner\Controller\AlertBannerEntityController::revisionPageTitle',
])
->setRequirement('_entity_access', 'localgov_alert_banner.update')
->setOption('_admin_route', TRUE);

return $route;
}
}

/**
* Gets the revision revert route.
*
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
* The entity type.
*
* @return \Symfony\Component\Routing\Route|null
* The generated route, if available.
*/
protected function getRevisionRevertRoute(EntityTypeInterface $entity_type) {
if ($entity_type->hasLinkTemplate('revision_revert')) {
$route = new Route($entity_type->getLinkTemplate('revision_revert'));
$route
->setDefaults([
'_form' => '\Drupal\localgov_alert_banner\Form\AlertBannerEntityRevisionRevertForm',
'_title' => 'Revert to earlier revision',
])
->setRequirement('_entity_access', 'localgov_alert_banner.update')
->setOption('_admin_route', TRUE);

return $route;
}
}

/**
* Gets the revision delete route.
*
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
* The entity type.
*
* @return \Symfony\Component\Routing\Route|null
* The generated route, if available.
*/
protected function getRevisionDeleteRoute(EntityTypeInterface $entity_type) {
if ($entity_type->hasLinkTemplate('revision_delete')) {
$route = new Route($entity_type->getLinkTemplate('revision_delete'));
$route
->setDefaults([
'_form' => '\Drupal\localgov_alert_banner\Form\AlertBannerEntityRevisionDeleteForm',
'_title' => 'Delete earlier revision',
])
->setRequirement('_entity_access', 'localgov_alert_banner.update')
->setOption('_admin_route', TRUE);

return $route;
}
}

/**
* Gets the revision translation revert route.
*
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
* The entity type.
*
* @return \Symfony\Component\Routing\Route|null
* The generated route, if available.
*/
protected function getRevisionTranslationRevertRoute(EntityTypeInterface $entity_type) {
if ($entity_type->hasLinkTemplate('translation_revert')) {
$route = new Route($entity_type->getLinkTemplate('translation_revert'));
$route
->setDefaults([
'_form' => '\Drupal\localgov_alert_banner\Form\AlertBannerEntityRevisionRevertTranslationForm',
'_title' => 'Revert to earlier revision of a translation',
])
->setRequirement('_entity_access', 'localgov_alert_banner.update')
->setOption('_admin_route', TRUE);

return $route;
}
}

/**
* Gets the settings form route.
*
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
* The entity type.
*
* @return \Symfony\Component\Routing\Route|null
* The generated route, if available.
*/
protected function getSettingsFormRoute(EntityTypeInterface $entity_type) {
if (!$entity_type->getBundleEntityType()) {
$route = new Route("/admin/structure/{$entity_type->id()}/settings");
$route
->setDefaults([
'_form' => 'Drupal\localgov_alert_banner\Form\AlertBannerEntitySettingsForm',
'_title' => "{$entity_type->getLabel()} settings",
])
->setRequirement('_permission', $entity_type->getAdminPermission())
->setOption('_admin_route', TRUE);

return $route;
}
}

}
Loading

0 comments on commit bab53b1

Please sign in to comment.