NodePermissions.php

Same filename and directory in other branches
  1. 9 core/modules/node/src/NodePermissions.php
  2. 10 core/modules/node/src/NodePermissions.php
  3. 11.x core/modules/node/src/NodePermissions.php

Namespace

Drupal\node

File

core/modules/node/src/NodePermissions.php

View source
<?php

namespace Drupal\node;

use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\node\Entity\NodeType;

/**
 * Provides dynamic permissions for nodes of different types.
 */
class NodePermissions {
    use StringTranslationTrait;
    
    /**
     * 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.'),
            ],
        ];
    }

}

Classes

Title Deprecated Summary
NodePermissions Provides dynamic permissions for nodes of different types.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.