cc-1.0.x-dev/modules/cc_account/src/Access/CcAccountAccessControlHandler.php
modules/cc_account/src/Access/CcAccountAccessControlHandler.php
<?php
namespace Drupal\cc_account\Access;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Entity\EntityAccessControlHandler;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Session\AccountInterface;
/**
* Defines the access control handler for the cryptocurrency account entity type.
*/
class CcAccountAccessControlHandler extends EntityAccessControlHandler {
/**
* {@inheritdoc}
*/
protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
/** @var \Drupal\cc_account\Entity\CcAccountInterface $entity */
switch ($operation) {
case 'view':
if (!$entity->isPublished()) {
$access_result = AccessResult::allowedIfHasPermission($account, 'view own unpublished cc accounts');
if (!$access_result->isAllowed()) {
$access_result = AccessResult::allowedIfHasPermission($account, 'view unpublished cc accounts');
}
return $access_result;
}
return AccessResult::allowedIfHasPermission($account, 'view published cc accounts');
case 'update':
if ($account->hasPermission('administer cc accounts')) {
return AccessResult::allowed();
}
return AccessResult::allowedIf($account->hasPermission('edit own cc account') && ($account->id() === $entity->getOwnerId()))
->cachePerUser()
->addCacheableDependency($entity);
case 'delete':
if ($account->hasPermission('administer cc accounts')) {
return AccessResult::allowed();
}
return AccessResult::allowedIf($account->hasPermission('delete own cc account') && ($account->id() === $entity->getOwnerId()))
->cachePerUser()
->addCacheableDependency($entity);
default:
return AccessResult::neutral();
}
}
/**
* {@inheritdoc}
*/
protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) {
return AccessResult::allowedIfHasPermission($account, 'create cc account');
}
}
