Skip to content

Commit e2477b6

Browse files
authored
[5.x] Improve AssetFolderPolicy performance (#10868)
1 parent d9d6b20 commit e2477b6

File tree

1 file changed

+31
-12
lines changed

1 file changed

+31
-12
lines changed

src/Policies/AssetFolderPolicy.php

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace Statamic\Policies;
44

5+
use Illuminate\Support\Facades\Gate;
6+
use Statamic\Contracts\Assets\Asset as AssetContract;
57
use Statamic\Facades\User;
68

79
class AssetFolderPolicy
@@ -25,10 +27,14 @@ public function move($user, $assetFolder)
2527
return false;
2628
}
2729

28-
return $assetFolder
29-
->assets(true)
30-
->reject(fn ($asset) => $user->can('move', $asset))
31-
->isEmpty();
30+
if ($this->isUsingCustomAssetPolicy()) {
31+
return $assetFolder
32+
->assets(true)
33+
->reject(fn ($asset) => $user->can('move', $asset))
34+
->isEmpty();
35+
}
36+
37+
return $assetFolder->container()->allowMoving();
3238
}
3339

3440
public function rename($user, $assetFolder)
@@ -39,10 +45,14 @@ public function rename($user, $assetFolder)
3945
return false;
4046
}
4147

42-
return $assetFolder
43-
->assets(true)
44-
->reject(fn ($asset) => $user->can('rename', $asset))
45-
->isEmpty();
48+
if ($this->isUsingCustomAssetPolicy()) {
49+
return $assetFolder
50+
->assets(true)
51+
->reject(fn ($asset) => $user->can('rename', $asset))
52+
->isEmpty();
53+
}
54+
55+
return $assetFolder->container()->allowRenaming();
4656
}
4757

4858
public function delete($user, $assetFolder)
@@ -53,9 +63,18 @@ public function delete($user, $assetFolder)
5363
return false;
5464
}
5565

56-
return $assetFolder
57-
->assets(true)
58-
->reject(fn ($asset) => $user->can('delete', $asset))
59-
->isEmpty();
66+
if ($this->isUsingCustomAssetPolicy()) {
67+
return $assetFolder
68+
->assets(true)
69+
->reject(fn ($asset) => $user->can('delete', $asset))
70+
->isEmpty();
71+
}
72+
73+
return true;
74+
}
75+
76+
protected function isUsingCustomAssetPolicy()
77+
{
78+
return Gate::policies()[AssetContract::class] !== AssetPolicy::class;
6079
}
6180
}

0 commit comments

Comments
 (0)