UserRolesCacheContext.php

Same filename in other branches
  1. 8.9.x core/lib/Drupal/Core/Cache/Context/UserRolesCacheContext.php
  2. 10 core/lib/Drupal/Core/Cache/Context/UserRolesCacheContext.php
  3. 11.x core/lib/Drupal/Core/Cache/Context/UserRolesCacheContext.php

Namespace

Drupal\Core\Cache\Context

File

core/lib/Drupal/Core/Cache/Context/UserRolesCacheContext.php

View source
<?php

namespace Drupal\Core\Cache\Context;

use Drupal\Core\Cache\CacheableMetadata;

/**
 * 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).
 */
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(),
        ]);
    }

}

Classes

Title Deprecated Summary
UserRolesCacheContext Defines the UserRolesCacheContext service, for "per role" caching.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.