og-8.x-1.x-dev/src/PermissionManager.php

src/PermissionManager.php
<?php

declare(strict_types=1);

namespace Drupal\og;

use Drupal\og\Event\PermissionEvent;
use Drupal\og\Event\PermissionEventInterface;
use Psr\EventDispatcher\EventDispatcherInterface;

/**
 * Manager for OG permissions.
 */
class PermissionManager implements PermissionManagerInterface {

  public function __construct(
    protected readonly EventDispatcherInterface $eventDispatcher,
  ) {}

  /**
   * {@inheritdoc}
   */
  public function getDefaultPermissions($group_entity_type_id, $group_bundle_id, array $group_content_bundle_ids, $role_name = NULL) {
    $event = new PermissionEvent($group_entity_type_id, $group_bundle_id, $group_content_bundle_ids);
    $this->eventDispatcher->dispatch($event, PermissionEventInterface::EVENT_NAME);
    return $event->getPermissions();
  }

  /**
   * {@inheritdoc}
   */
  public function getDefaultGroupPermissions($group_entity_type_id, $group_bundle_id, $role_name = NULL) {
    $permissions = $this->getDefaultPermissions($group_entity_type_id, $group_bundle_id, [], $role_name);

    $permissions = array_filter($permissions, function (PermissionInterface $permission) use ($role_name) {
      // Only keep group permissions.
      if (!$permission instanceof GroupPermission) {
        return FALSE;
      }

      // Optionally filter on role name.
      $default_roles = $permission->getDefaultRoles();
      return empty($role_name) || (!empty($default_roles) && in_array($role_name, $permission->getDefaultRoles()));
    });

    return $permissions;
  }

  /**
   * {@inheritdoc}
   */
  public function getDefaultEntityOperationPermissions($group_entity_type_id, $group_bundle_id, array $group_content_bundle_ids, $role_name = NULL) {
    $permissions = $this->getDefaultPermissions($group_entity_type_id, $group_bundle_id, $group_content_bundle_ids, $role_name);

    $permissions = array_filter($permissions, function (PermissionInterface $permission) use ($role_name) {
      // Only keep entity operation permissions.
      if (!$permission instanceof GroupContentOperationPermission) {
        return FALSE;
      }

      // Optionally filter on role name.
      $default_roles = $permission->getDefaultRoles();
      return empty($role_name) || (!empty($default_roles) && in_array($role_name, $permission->getDefaultRoles()));
    });

    return $permissions;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc