mirror of
https://github.com/archtechx/tenancy.git
synced 2026-02-04 05:14:03 +00:00
[4.x] Filesystem bootstrapper: scoped disk support (#1402)
Fixes #1401 --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: lukinovec <lukinovec@gmail.com> Co-authored-by: Samuel Stancl <samuel@archte.ch>
This commit is contained in:
parent
7955aae6d5
commit
3c0e21b726
3 changed files with 50 additions and 2 deletions
|
|
@ -33,7 +33,8 @@
|
||||||
"doctrine/dbal": "^3.6.0",
|
"doctrine/dbal": "^3.6.0",
|
||||||
"spatie/valuestore": "^1.2.5",
|
"spatie/valuestore": "^1.2.5",
|
||||||
"pestphp/pest": "^3.0",
|
"pestphp/pest": "^3.0",
|
||||||
"larastan/larastan": "^3.0"
|
"larastan/larastan": "^3.0",
|
||||||
|
"league/flysystem-path-prefixing": "^3.0"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
|
|
||||||
|
|
@ -114,7 +114,18 @@ class FilesystemTenancyBootstrapper implements TenancyBootstrapper
|
||||||
|
|
||||||
protected function forgetDisks(): void
|
protected function forgetDisks(): void
|
||||||
{
|
{
|
||||||
Storage::forgetDisk($this->app['config']['tenancy.filesystem.disks']);
|
$tenantDisks = $this->app['config']['tenancy.filesystem.disks'];
|
||||||
|
$scopedDisks = [];
|
||||||
|
|
||||||
|
foreach ($this->app['config']['filesystems.disks'] as $name => $disk) {
|
||||||
|
if (isset($disk['driver'], $disk['disk'])
|
||||||
|
&& $disk['driver'] === 'scoped'
|
||||||
|
&& in_array($disk['disk'], $tenantDisks, true)) {
|
||||||
|
$scopedDisks[] = $name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Storage::forgetDisk(array_merge($tenantDisks, $scopedDisks));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function diskRoot(string $disk, Tenant|false $tenant): void
|
protected function diskRoot(string $disk, Tenant|false $tenant): void
|
||||||
|
|
|
||||||
|
|
@ -221,3 +221,39 @@ test('the framework/cache directory is created when storage_path is scoped', fun
|
||||||
expect(is_dir($centralStoragePath . "/tenant{$tenant->id}/framework/cache"))->toBeFalse();
|
expect(is_dir($centralStoragePath . "/tenant{$tenant->id}/framework/cache"))->toBeFalse();
|
||||||
}
|
}
|
||||||
})->with([true, false]);
|
})->with([true, false]);
|
||||||
|
|
||||||
|
test('scoped disks are scoped per tenant', function () {
|
||||||
|
config([
|
||||||
|
'tenancy.bootstrappers' => [
|
||||||
|
FilesystemTenancyBootstrapper::class,
|
||||||
|
],
|
||||||
|
'filesystems.disks.scoped_disk' => [
|
||||||
|
'driver' => 'scoped',
|
||||||
|
'disk' => 'public',
|
||||||
|
'prefix' => 'scoped_disk_prefix',
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$tenant = Tenant::create();
|
||||||
|
|
||||||
|
Storage::disk('scoped_disk')->put('foo.txt', 'central');
|
||||||
|
expect(Storage::disk('scoped_disk')->get('foo.txt'))->toBe('central');
|
||||||
|
expect(file_get_contents(storage_path() . "/app/public/scoped_disk_prefix/foo.txt"))->toBe('central');
|
||||||
|
|
||||||
|
tenancy()->initialize($tenant);
|
||||||
|
|
||||||
|
expect(Storage::disk('scoped_disk')->get('foo.txt'))->toBe(null);
|
||||||
|
Storage::disk('scoped_disk')->put('foo.txt', 'tenant');
|
||||||
|
expect(file_get_contents(storage_path() . "/app/public/scoped_disk_prefix/foo.txt"))->toBe('tenant');
|
||||||
|
expect(Storage::disk('scoped_disk')->get('foo.txt'))->toBe('tenant');
|
||||||
|
|
||||||
|
tenancy()->end();
|
||||||
|
|
||||||
|
expect(Storage::disk('scoped_disk')->get('foo.txt'))->toBe('central');
|
||||||
|
Storage::disk('scoped_disk')->put('foo.txt', 'central2');
|
||||||
|
expect(Storage::disk('scoped_disk')->get('foo.txt'))->toBe('central2');
|
||||||
|
|
||||||
|
expect(file_get_contents(storage_path() . "/app/public/scoped_disk_prefix/foo.txt"))->toBe('central2');
|
||||||
|
expect(file_get_contents(storage_path() . "/tenant{$tenant->id}/app/public/scoped_disk_prefix/foo.txt"))->toBe('tenant');
|
||||||
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue