You are here

class UserRolesCacheContext in Drupal 10

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Cache/Context/UserRolesCacheContext.php \Drupal\Core\Cache\Context\UserRolesCacheContext
  2. 9 core/lib/Drupal/Core/Cache/Context/UserRolesCacheContext.php \Drupal\Core\Cache\Context\UserRolesCacheContext

Defines the UserRolesCacheContext service, for "per role" caching.

Only use this cache context when checking explicitly for certain roles. Use user.permissions for anything that checks permissions.

Cache context ID: 'user.roles' (to vary by all roles of the current user). Calculated cache context ID: 'user.roles:%role', e.g. 'user.roles:anonymous' (to vary by the presence/absence of a specific role).

Hierarchy

Expanded class hierarchy of UserRolesCacheContext

1 string reference to 'UserRolesCacheContext'
core.services.yml in core/core.services.yml
core/core.services.yml
1 service uses UserRolesCacheContext
cache_context.user.roles in core/core.services.yml
Drupal\Core\Cache\Context\UserRolesCacheContext

File

core/lib/Drupal/Core/Cache/Context/UserRolesCacheContext.php, line 17

Namespace

Drupal\Core\Cache\Context
View source
class UserRolesCacheContext extends UserCacheContextBase implements CalculatedCacheContextInterface {

  /**
   * {@inheritdoc}
   */
  public static function getLabel() {
    return t("User's roles");
  }

  /**
   * {@inheritdoc}
   */
  public function getContext($role = NULL) {

    // User 1 does not actually have any special behavior for roles; this is
    // added as additional security and backwards compatibility protection for
    // SA-CORE-2015-002.
    // @todo Remove in Drupal 9.0.0.
    if ($this->user
      ->id() == 1) {
      return 'is-super-user';
    }
    if ($role === NULL) {
      return implode(',', $this->user
        ->getRoles());
    }
    else {
      return in_array($role, $this->user
        ->getRoles()) ? '0' : '1';
    }
  }

  /**
   * {@inheritdoc}
   */
  public function getCacheableMetadata($role = NULL) {
    return (new CacheableMetadata())
      ->setCacheTags([
      'user:' . $this->user
        ->id(),
    ]);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
UserCacheContextBase::$user protected property The account object.
UserCacheContextBase::__construct public function Constructs a new UserCacheContextBase class. 1
UserRolesCacheContext::getCacheableMetadata public function Gets the cacheability metadata for the context based on the parameter value. Overrides CalculatedCacheContextInterface::getCacheableMetadata
UserRolesCacheContext::getContext public function Returns the string representation of the cache context. Overrides CalculatedCacheContextInterface::getContext
UserRolesCacheContext::getLabel public static function Returns the label of the cache context. Overrides CalculatedCacheContextInterface::getLabel