8000 Avoid unnecessary cache forget · PaolaRuby/laravel-permission@e62b309 · GitHub
[go: up one dir, main page]

Skip to content

Commit e62b309

Browse files
committed
Avoid unnecessary cache forget
1 parent dfcbbe0 commit e62b309

File tree

3 files changed

+57
-5
lines changed

3 files changed

+57
-5
lines changed

src/Traits/HasPermissions.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,9 @@ function ($object) use ($permissions, $model) {
371371
);
372372
}
373373

374-
$this->forgetCachedPermissions();
374+
if (is_a($this, get_class(app(PermissionRegistrar::class)->getRoleClass()))) {
375+
$this->forgetCachedPermissions();
376+
}
375377

376378
return $this;
377379
}
@@ -401,7 +403,9 @@ public function revokePermissionTo($permission)
401403
{
402404
$this->permissions()->detach($this->getStoredPermission($permission));
403405

404-
$this->forgetCachedPermissions();
406+
if (is_a($this, get_class(app(PermissionRegistrar::class)->getRoleClass()))) {
407+
$this->forgetCachedPermissions();
408+
}
405409

406410
$this->load('permissions');
407411

src/Traits/HasRoles.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,9 @@ function ($object) use ($roles, $model) {
150150
);
151151
}
152152

153-
$this->forgetCachedPermissions();
153+
if (is_a($this, get_class($this->getPermissionClass()))) {
154+
$this->forgetCachedPermissions();
155+
}
154156

155157
return $this;
156158
}
@@ -166,7 +168,9 @@ public function removeRole($role)
166168

167169
$this->load('roles');
168170

169-
$this->forgetCachedPermissions();
171+
if (is_a($this, get_class($this->getPermissionClass()))) {
172+
$this->forgetCachedPermissions();
173+
}
170174

171175
return $this;
172176
}

tests/CacheTest.php

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,23 @@ public function it_flushes_the_cache_when_updating_a_role()
104104
}
105105

106106
/** @test */
107-
public function it_flushes_the_cache_when_removing_a_role_from_a_user()
107+
public function removing_a_permission_from_a_user_should_not_flush_the_cache()
108+
{
109+
$this->testUser->givePermissionTo('edit-articles');
110+
111+
$this->registrar->getPermissions();
112+
113+
$this->testUser->revokePermissionTo('edit-articles');
114+
115+
$this->resetQueryCount();
116+
117+
$this->registrar->getPermissions();
118+
119+
$this->assertQueryCount(0);
120+
}
121+
122+
/** @test */
123+
public function removing_a_role_from_a_user_should_not_flush_the_cache()
108124
{
109125
$this->testUser->assignRole('testRole');
110126

@@ -116,6 +132,34 @@ public function it_flushes_the_cache_when_removing_a_role_from_a_user()
116132

117133
$this->registrar->getPermissions();
118134

135+
$this->assertQueryCount(0);
136+
}
137+
138+
/** @test */
139+
public function it_flushes_the_cache_when_removing_a_role_from_a_permission()
140+
{
141+
$this->testUserPermission->assignRole('testRole');
142+
143+
$this->registrar->getPermissions();
144+
145+
$this->testUserPermission->removeRole('testRole');
146+
147+
$this->resetQueryCount();
148+
149+
$this->registrar->getPermissions();
150+
151+
$this->assertQueryCount($this->cache_init_count + $this->cache_load_count + $this->cache_run_count);
152+
}
153+
154+
/** @test */
155+
public function it_flushes_the_cache_when_assign_a_permission_to_a_role()
156+
{
157+
$this->testUserRole->givePermissionTo('edit-articles');
158+
159+
$this->resetQueryCount();
160+
161+
$this->registrar->getPermissions();
162+
119163
$this->assertQueryCount($this->cache_init_count + $this->cache_load_count + $this->cache_run_count);
120164
}
121165

0 commit comments

Comments
 (0)
0