UserRolesCacheContext.php
Same filename in other branches
Namespace
Drupal\Core\Cache\ContextFile
-
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.