Mercurial > hg > isophonics-drupal-site
diff core/modules/node/src/NodePermissions.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | af1871eacc83 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/node/src/NodePermissions.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,78 @@ +<?php + +namespace Drupal\node; + +use Drupal\Core\Routing\UrlGeneratorTrait; +use Drupal\Core\StringTranslation\StringTranslationTrait; +use Drupal\node\Entity\NodeType; + +/** + * Provides dynamic permissions for nodes of different types. + */ +class NodePermissions { + + use StringTranslationTrait; + use UrlGeneratorTrait; + + /** + * Returns an array of node type permissions. + * + * @return array + * The node type permissions. + * @see \Drupal\user\PermissionHandlerInterface::getPermissions() + */ + public function nodeTypePermissions() { + $perms = []; + // Generate node permissions for all node types. + foreach (NodeType::loadMultiple() as $type) { + $perms += $this->buildPermissions($type); + } + + return $perms; + } + + /** + * Returns a list of node permissions for a given node type. + * + * @param \Drupal\node\Entity\NodeType $type + * The node type. + * + * @return array + * An associative array of permission names and descriptions. + */ + protected function buildPermissions(NodeType $type) { + $type_id = $type->id(); + $type_params = ['%type_name' => $type->label()]; + + return [ + "create $type_id content" => [ + 'title' => $this->t('%type_name: Create new content', $type_params), + ], + "edit own $type_id content" => [ + 'title' => $this->t('%type_name: Edit own content', $type_params), + ], + "edit any $type_id content" => [ + 'title' => $this->t('%type_name: Edit any content', $type_params), + ], + "delete own $type_id content" => [ + 'title' => $this->t('%type_name: Delete own content', $type_params), + ], + "delete any $type_id content" => [ + 'title' => $this->t('%type_name: Delete any content', $type_params), + ], + "view $type_id revisions" => [ + 'title' => $this->t('%type_name: View revisions', $type_params), + 'description' => t('To view a revision, you also need permission to view the content item.'), + ], + "revert $type_id revisions" => [ + 'title' => $this->t('%type_name: Revert revisions', $type_params), + 'description' => t('To revert a revision, you also need permission to edit the content item.'), + ], + "delete $type_id revisions" => [ + 'title' => $this->t('%type_name: Delete revisions', $type_params), + 'description' => $this->t('To delete a revision, you also need permission to delete the content item.'), + ], + ]; + } + +}