mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-18 00:02:15 +00:00
Transfer Content Ownership To Team Folder Owner after member was deleted by author of team folder
This commit is contained in:
@@ -10,11 +10,11 @@ use Domain\Teams\Controllers\ConvertFolderIntoTeamFolderController;
|
|||||||
Route::apiResource('/invitations', InvitationsController::class);
|
Route::apiResource('/invitations', InvitationsController::class);
|
||||||
|
|
||||||
Route::group(['middleware' => ['auth:sanctum']], function () {
|
Route::group(['middleware' => ['auth:sanctum']], function () {
|
||||||
|
Route::get('/shared-with-me/{id}', BrowseSharedWithMeController::class);
|
||||||
Route::apiResource('/folders', TeamFoldersController::class);
|
Route::apiResource('/folders', TeamFoldersController::class);
|
||||||
|
|
||||||
Route::post('/folders/{folder}/convert', ConvertFolderIntoTeamFolderController::class);
|
Route::post('/folders/{folder}/convert', ConvertFolderIntoTeamFolderController::class);
|
||||||
Route::delete('/folders/{folder}/leave', LeaveTeamFolderController::class);
|
Route::delete('/folders/{folder}/leave', LeaveTeamFolderController::class);
|
||||||
Route::get('/folders/{folder}/tree', NavigationTreeController::class);
|
Route::get('/folders/{folder}/tree', NavigationTreeController::class);
|
||||||
|
|
||||||
Route::get('/shared-with-me/{id}', BrowseSharedWithMeController::class);
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -6,7 +6,10 @@ use Domain\Folders\Models\Folder;
|
|||||||
|
|
||||||
class UpdateMembersAction
|
class UpdateMembersAction
|
||||||
{
|
{
|
||||||
// TODO: after removing user from team folder from administrator, set file owner
|
public function __construct(
|
||||||
|
public TransferContentOwnershipToTeamFolderOwnerAction $transferContentOwnership,
|
||||||
|
) {}
|
||||||
|
|
||||||
public function __invoke(Folder $folder, $members): void
|
public function __invoke(Folder $folder, $members): void
|
||||||
{
|
{
|
||||||
$existingMembers = $folder
|
$existingMembers = $folder
|
||||||
@@ -24,6 +27,9 @@ class UpdateMembersAction
|
|||||||
->where('parent_id', $folder->id)
|
->where('parent_id', $folder->id)
|
||||||
->whereIn('user_id', $deletedMembers->toArray())
|
->whereIn('user_id', $deletedMembers->toArray())
|
||||||
->delete();
|
->delete();
|
||||||
|
|
||||||
|
// Transfer files/folders ownership to team folder owner
|
||||||
|
$deletedMembers->each(fn ($memberId) => ($this->transferContentOwnership)($folder, $memberId));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update privileges
|
// Update privileges
|
||||||
|
|||||||
@@ -296,8 +296,10 @@ class TeamManagementTest extends TestCase
|
|||||||
$user = User::factory()
|
$user = User::factory()
|
||||||
->create();
|
->create();
|
||||||
|
|
||||||
$members = User::factory()
|
$member = User::factory()
|
||||||
->count(2)
|
->create();
|
||||||
|
|
||||||
|
$deletedMember = User::factory()
|
||||||
->create();
|
->create();
|
||||||
|
|
||||||
$folder = Folder::factory()
|
$folder = Folder::factory()
|
||||||
@@ -306,26 +308,45 @@ class TeamManagementTest extends TestCase
|
|||||||
'team_folder' => 1,
|
'team_folder' => 1,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// Create fake file record
|
||||||
|
File::factory()
|
||||||
|
->create([
|
||||||
|
'name' => 'Member File',
|
||||||
|
'basename' => 'fake-file.zip',
|
||||||
|
'parent_id' => $folder->id,
|
||||||
|
'user_id' => $deletedMember->id,
|
||||||
|
'type' => 'file',
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Create fake file
|
||||||
|
$fakeFile = UploadedFile::fake()
|
||||||
|
->create('fake-file.zip', 2000, 'application/zip');
|
||||||
|
|
||||||
|
// Put fake file into correct directory
|
||||||
|
Storage::putFileAs("files/{$deletedMember->id}", $fakeFile, 'fake-file.zip');
|
||||||
|
|
||||||
|
// Attach members to the team folder
|
||||||
DB::table('team_folder_members')
|
DB::table('team_folder_members')
|
||||||
->insert([
|
->insert([
|
||||||
[
|
[
|
||||||
'parent_id' => $folder->id,
|
'parent_id' => $folder->id,
|
||||||
'user_id' => $members[0]->id,
|
'user_id' => $member->id,
|
||||||
'permission' => 'can-edit',
|
'permission' => 'can-edit',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'parent_id' => $folder->id,
|
'parent_id' => $folder->id,
|
||||||
'user_id' => $members[1]->id,
|
'user_id' => $deletedMember->id,
|
||||||
'permission' => 'can-edit',
|
'permission' => 'can-edit',
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// Update team folder members
|
||||||
$this
|
$this
|
||||||
->actingAs($user)
|
->actingAs($user)
|
||||||
->patchJson("/api/teams/folders/{$folder->id}", [
|
->patchJson("/api/teams/folders/{$folder->id}", [
|
||||||
'members' => [
|
'members' => [
|
||||||
[
|
[
|
||||||
'id' => $members[0]->id,
|
'id' => $member->id,
|
||||||
'permission' => 'can-edit',
|
'permission' => 'can-edit',
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
@@ -333,10 +354,14 @@ class TeamManagementTest extends TestCase
|
|||||||
])
|
])
|
||||||
->assertCreated();
|
->assertCreated();
|
||||||
|
|
||||||
|
// Check if file was moved from member directory to owner directory
|
||||||
|
Storage::assertMissing("files/{$deletedMember->id}/fake-file.zip");
|
||||||
|
Storage::assertExists("files/{$user->id}/fake-file.zip");
|
||||||
|
|
||||||
$this
|
$this
|
||||||
->assertDatabaseCount('team_folder_members', 1)
|
->assertDatabaseCount('team_folder_members', 1)
|
||||||
->assertDatabaseMissing('team_folder_members', [
|
->assertDatabaseMissing('team_folder_members', [
|
||||||
'user_id' => $members[1]->id,
|
'user_id' => $deletedMember->id,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user