quiz-6.0.0-alpha4/src/Access/QuizResultAccessControlHandler.php

src/Access/QuizResultAccessControlHandler.php
<?php

namespace Drupal\quiz\Access;

use Drupal\Core\Access\AccessResultAllowed;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\entity\UncacheableEntityAccessControlHandler;

/**
 * Determines access to QuizResult.
 *
 * @ingroup quiz
 */
class QuizResultAccessControlHandler extends UncacheableEntityAccessControlHandler {

  /**
   * {@inheritdoc}
   */
  public function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {

    $current_user = $this->prepareUser();
    if ($operation == 'view') {
      if ($current_user->hasPermission('view results for own quiz') && $account->id() == $entity->getQuiz()->get('uid')->getString()) {
        // User can view all quiz results for a quiz they authorized.
        return AccessResultAllowed::allowed();
      }
      if ($current_user->hasPermission('view own quiz_result') && $account->id() == $entity->get('uid')->getString()) {
        // User can view their own quiz result.
        return AccessResultAllowed::allowed();
      }
    }

    if ($operation == 'update') {
      if ($current_user->hasPermission('score own quiz') && $account->id() == $entity->getQuiz()->get('uid')->getString()) {
        // User can view all quiz results for a quiz they authored.
        return AccessResultAllowed::allowed();
      }
    }

    if (str_starts_with($operation, 'feedback_')) {
      // Access to feedback must be explicitly allowed.
      return AccessResultAllowed::neutral();
    }

    return parent::checkAccess($entity, $operation, $account);
  }

}

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

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