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;
}
}
