Refactor to MemberCacheFlusher

This commit is contained in:
Aaron Carlino 2017-12-07 16:07:40 +13:00 committed by Damian Mooyman
parent 4857816c9e
commit 86458941be
3 changed files with 14 additions and 14 deletions

View File

@ -6,11 +6,11 @@ namespace SilverStripe\Core\Cache;
* Defines a service that can flush its cache for a list of members
* @package SilverStripe\Core\Cache
*/
interface CacheFlusher
interface MemberCacheFlusher
{
/**
* @param null $ids
* @param null $memberIDs
* @return mixed
*/
public function flushCache($ids = null);
public function flushMemberCache($memberIDs = null);
}

View File

@ -6,7 +6,7 @@ use Psr\Log\InvalidArgumentException;
use SilverStripe\Core\Flushable;
use SilverStripe\ORM\DataExtension;
use SilverStripe\ORM\DataObject;
use SilverStripe\Core\Cache\CacheFlusher;
use SilverStripe\Core\Cache\MemberCacheFlusher;
class InheritedPermissionFlusher extends DataExtension implements Flushable
{
@ -48,11 +48,11 @@ class InheritedPermissionFlusher extends DataExtension implements Flushable
public function setServices($services)
{
foreach ($services as $service) {
if (!$service instanceof CacheFlusher) {
if (!$service instanceof MemberCacheFlusher) {
throw new InvalidArgumentException(sprintf(
'%s.services must contain only %s instances. %s provided.',
__CLASS__,
CacheFlusher::class,
MemberCacheFlusher::class,
get_class($service)
));
}
@ -78,7 +78,7 @@ class InheritedPermissionFlusher extends DataExtension implements Flushable
{
$ids = $this->getMemberIDList();
foreach ($this->services as $service) {
$service->flushCache($ids);
$service->flushMemberCache($ids);
}
}

View File

@ -3,9 +3,9 @@
namespace SilverStripe\Security\Tests\InheritedPermissionsFlusherTest;
use Psr\SimpleCache\CacheInterface;
use SilverStripe\Core\Cache\CacheFlusher;
use SilverStripe\Core\Cache\MemberCacheFlusher;
class TestCacheFlusher implements CacheFlusher
class TestCacheFlusher implements MemberCacheFlusher
{
/**
* @var array
@ -32,22 +32,22 @@ class TestCacheFlusher implements CacheFlusher
/**
* Clear the cache for this instance only
* @param array $ids A list of member IDs
* @param array $memberIDs A list of member IDs
*/
public function flushCache($ids = null)
public function flushMemberCache($memberIDs = null)
{
if (!$this->cache) {
return;
}
// Hard flush, e.g. flush=1
if (!$ids) {
if (!$memberIDs) {
$this->cache->clear();
}
if ($ids && is_array($ids)) {
if ($memberIDs && is_array($memberIDs)) {
foreach (self::$categories as $category) {
foreach ($ids as $memberID) {
foreach ($memberIDs as $memberID) {
$key = $this->generateCacheKey($category, $memberID);
$this->cache->delete($key);
}