diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 928deb2a..825b5610 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -59,7 +59,7 @@ "/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=2bdbb5f9141052aaaa3d", "/chunks/plans.js": "/chunks/plans.js?id=a3a16f546521050656fb", "/chunks/platform.js": "/chunks/platform.js?id=07fd139d62a2c60f9468", - "/chunks/platform~chunks/shared.js": "/chunks/platform~chunks/shared.js?id=e914b8a5e845646456c3", + "/chunks/platform~chunks/shared.js": "/chunks/platform~chunks/shared.js?id=6da8a930d3ab447dc666", "/chunks/profile.js": "/chunks/profile.js?id=91ea55260c78ea4e7abd", "/chunks/profile~chunks/settings-password.js": "/chunks/profile~chunks/settings-password.js?id=7b80324eef831d31e3e8", "/chunks/purchase-code.js": "/chunks/purchase-code.js?id=26a3951e09a8862d8dc2", @@ -182,5 +182,21 @@ "/chunks/shared-with-me.54e36bd53fa339ec4fb7.hot-update.js": "/chunks/shared-with-me.54e36bd53fa339ec4fb7.hot-update.js", "/chunks/shared-with-me.17b05bf3b95620219457.hot-update.js": "/chunks/shared-with-me.17b05bf3b95620219457.hot-update.js", "/chunks/shared-with-me.4a8a25245ef7531c5735.hot-update.js": "/chunks/shared-with-me.4a8a25245ef7531c5735.hot-update.js", - "/chunks/shared-with-me.2455d13237b72650ef8b.hot-update.js": "/chunks/shared-with-me.2455d13237b72650ef8b.hot-update.js" + "/chunks/shared-with-me.2455d13237b72650ef8b.hot-update.js": "/chunks/shared-with-me.2455d13237b72650ef8b.hot-update.js", + "/chunks/platform~chunks/shared.c4d84777bd49629c7f4e.hot-update.js": "/chunks/platform~chunks/shared.c4d84777bd49629c7f4e.hot-update.js", + "/chunks/platform~chunks/shared.2002cbbac234f7eda6b0.hot-update.js": "/chunks/platform~chunks/shared.2002cbbac234f7eda6b0.hot-update.js", + "/chunks/platform~chunks/shared.d3f35c4b013d89a92526.hot-update.js": "/chunks/platform~chunks/shared.d3f35c4b013d89a92526.hot-update.js", + "/chunks/platform~chunks/shared.5505ecef8146fd90e641.hot-update.js": "/chunks/platform~chunks/shared.5505ecef8146fd90e641.hot-update.js", + "/chunks/platform~chunks/shared.44baf0152316974ff956.hot-update.js": "/chunks/platform~chunks/shared.44baf0152316974ff956.hot-update.js", + "/chunks/platform~chunks/shared.b850f5f0dbce66101ac6.hot-update.js": "/chunks/platform~chunks/shared.b850f5f0dbce66101ac6.hot-update.js", + "/chunks/platform~chunks/shared.fad4fcff2a55b7c9de5b.hot-update.js": "/chunks/platform~chunks/shared.fad4fcff2a55b7c9de5b.hot-update.js", + "/chunks/platform~chunks/shared.427068b74f3a9223c8af.hot-update.js": "/chunks/platform~chunks/shared.427068b74f3a9223c8af.hot-update.js", + "/chunks/platform~chunks/shared.7cd67170f606d88b046a.hot-update.js": "/chunks/platform~chunks/shared.7cd67170f606d88b046a.hot-update.js", + "/chunks/platform~chunks/shared.4a5f63d6af032394abb4.hot-update.js": "/chunks/platform~chunks/shared.4a5f63d6af032394abb4.hot-update.js", + "/chunks/platform~chunks/shared.85e2c221e154cdb096ca.hot-update.js": "/chunks/platform~chunks/shared.85e2c221e154cdb096ca.hot-update.js", + "/chunks/platform~chunks/shared.40220b39a67ea6947ada.hot-update.js": "/chunks/platform~chunks/shared.40220b39a67ea6947ada.hot-update.js", + "/chunks/platform~chunks/shared.cdc982ee462905db2739.hot-update.js": "/chunks/platform~chunks/shared.cdc982ee462905db2739.hot-update.js", + "/chunks/platform~chunks/shared.da8714bce7630fc753ba.hot-update.js": "/chunks/platform~chunks/shared.da8714bce7630fc753ba.hot-update.js", + "/chunks/platform~chunks/shared.1c7a870b7ada9ad6da18.hot-update.js": "/chunks/platform~chunks/shared.1c7a870b7ada9ad6da18.hot-update.js", + "/chunks/platform~chunks/shared.d6227f7e312ed10fe374.hot-update.js": "/chunks/platform~chunks/shared.d6227f7e312ed10fe374.hot-update.js" } diff --git a/resources/js/components/FilesView/DesktopToolbar.vue b/resources/js/components/FilesView/DesktopToolbar.vue index c4cd8e07..be50343e 100644 --- a/resources/js/components/FilesView/DesktopToolbar.vue +++ b/resources/js/components/FilesView/DesktopToolbar.vue @@ -16,14 +16,15 @@ - + - - + + + @@ -36,6 +37,22 @@ + + + + + + + + + + + + + + + @@ -121,7 +138,17 @@ 'currentFolder', 'sharedDetail', 'clipboard', + 'user', ]), + canEdit() { + if (this.currentTeamFolder && this.user) { + let member = this.currentTeamFolder.data.relationships.members.data.find(member => member.data.id === this.user.data.id) + + return member.data.attributes.permission === 'can-edit' + } + + return false + }, teamFolder() { return this.currentTeamFolder ? this.currentTeamFolder @@ -138,18 +165,23 @@ return this.$isThisRoute(this.$route, ['TeamFolders']) && ! this.$route.params.id }, + isSharedWithMeHomepage() { + return this.$isThisRoute(this.$route, ['SharedWithMe']) + && ! this.$route.params.id + }, canCreateFolderInView() { - return ! this.$isThisRoute(this.$route, ['Files', 'Public', 'TeamFolders']) + return ! this.$isThisRoute(this.$route, ['Files', 'Public', 'TeamFolders', 'SharedWithMe']) }, canShowConvertToTeamFolder() { return this.$isThisRoute(this.$route, ['Files', 'MySharedItems']) }, canUploadInView() { - return ! this.$isThisRoute(this.$route, ['Files', 'Public', 'TeamFolders']) + return ! this.$isThisRoute(this.$route, ['Files', 'Public', 'TeamFolders', 'SharedWithMe']) }, canDeleteInView() { let routes = [ 'TeamFolders', + 'SharedWithMe', 'RecentUploads', 'MySharedItems', 'Trash', diff --git a/src/App/Console/Commands/SetupDevEnvironment.php b/src/App/Console/Commands/SetupDevEnvironment.php index 15eb3eec..7f36699d 100644 --- a/src/App/Console/Commands/SetupDevEnvironment.php +++ b/src/App/Console/Commands/SetupDevEnvironment.php @@ -128,7 +128,7 @@ class SetupDevEnvironment extends Command collect([ [ 'avatar' => 'avatar-02.png', - 'email' => 'alice@vuefilemanager.com', + 'email' => 'alice@hi5ve.digital', ], [ 'avatar' => 'avatar-03.png', @@ -801,7 +801,7 @@ class SetupDevEnvironment extends Command $member = User::whereEmail('howdy@hi5ve.digital') ->first(); - $owner = User::whereEmail('alice@vuefilemanager.com') + $owner = User::whereEmail('alice@hi5ve.digital') ->first(); $folder = Folder::factory() diff --git a/src/App/Providers/AuthServiceProvider.php b/src/App/Providers/AuthServiceProvider.php index 99c7bf0c..96468b54 100644 --- a/src/App/Providers/AuthServiceProvider.php +++ b/src/App/Providers/AuthServiceProvider.php @@ -1,6 +1,7 @@ getLatestParent(); + $membership = DB::table('team_folder_members') - ->where('parent_id', $item->getLatestParent()->id) + ->where('parent_id', $teamFolder->id) ->where('user_id', $user->id) ->first(); - return $membership?->permission === $ability; + // check existing members permission or check team folder owner privileges + return $membership?->permission === $ability || $teamFolder->user_id === Auth::id(); } } diff --git a/src/Domain/Admin/Actions/DeleteUserDataAction.php b/src/Domain/Admin/Actions/DeleteUserDataAction.php index 3493c848..336b13f1 100644 --- a/src/Domain/Admin/Actions/DeleteUserDataAction.php +++ b/src/Domain/Admin/Actions/DeleteUserDataAction.php @@ -21,7 +21,7 @@ class DeleteUserDataAction Storage::deleteDirectory("files/$user->id"); // Delete all user records in database - collect(['folders', 'files', 'user_settings', 'shares', 'favourite_folder', 'zips', 'traffic']) + collect(['folders', 'files', 'user_settings', 'shares', 'favourite_folder', 'traffic']) ->each(function ($table) use ($user) { DB::table($table) ->whereUserId($user->id) diff --git a/src/Domain/Sharing/Controllers/ShareController.php b/src/Domain/Sharing/Controllers/ShareController.php index 5f74676a..91789d40 100644 --- a/src/Domain/Sharing/Controllers/ShareController.php +++ b/src/Domain/Sharing/Controllers/ShareController.php @@ -28,14 +28,13 @@ class ShareController extends Controller CreateShareRequest $request, SendViaEmailAction $sendLinkToEmailAction, ): ShareResource { - $type = $request->input('type') === 'folder' ? 'folder' : 'file'; - $item = get_item($request->input('id'), $type); + $item = get_item($request->input('type'), $request->input('id')); $this->authorize('owner', $item); $shared = Share::create([ 'password' => $request->has('password') ? bcrypt($request->input('password')) : null, - 'type' => $type, + 'type' => $request->input('type') === 'folder' ? 'folder' : 'file', 'is_protected' => $request->input('isPassword'), 'permission' => $request->input('permission') ?? null, 'expire_in' => $request->input('expiration') ?? null, diff --git a/src/Domain/Teams/Controllers/TeamFoldersController.php b/src/Domain/Teams/Controllers/TeamFoldersController.php index a5f55ff8..0e76a474 100644 --- a/src/Domain/Teams/Controllers/TeamFoldersController.php +++ b/src/Domain/Teams/Controllers/TeamFoldersController.php @@ -33,13 +33,11 @@ class TeamFoldersController extends Controller $folders = Folder::where('parent_id', $id) ->where('team_folder', ! Str::isUuid($id)) - ->where('user_id', Auth::id()) ->sortable() ->get(); if ($id) { $files = File::where('parent_id', $id) - ->where('user_id', Auth::id()) ->sortable() ->get(); } diff --git a/tests/Domain/Sharing/UserShareTest.php b/tests/Domain/Sharing/UserShareTest.php index 34a0682c..c43387b9 100644 --- a/tests/Domain/Sharing/UserShareTest.php +++ b/tests/Domain/Sharing/UserShareTest.php @@ -16,12 +16,12 @@ class UserShareTest extends TestCase */ public function it_share_single_file_without_password() { - $file = File::factory(File::class) - ->create(); - $user = User::factory(User::class) ->create(); + $file = File::factory(File::class) + ->create(['user_id' => $user->id]); + $this ->actingAs($user) ->postJson('/api/share', [ @@ -49,12 +49,12 @@ class UserShareTest extends TestCase */ public function it_share_folder_without_password() { - $folder = Folder::factory(Folder::class) - ->create(); - $user = User::factory(User::class) ->create(); + $folder = Folder::factory(Folder::class) + ->create(['user_id' => $user->id]); + $this ->actingAs($user) ->postJson('/api/share', [ @@ -82,12 +82,12 @@ class UserShareTest extends TestCase */ public function it_share_folder_with_password() { - $folder = Folder::factory(Folder::class) - ->create(); - $user = User::factory(User::class) ->create(); + $folder = Folder::factory(Folder::class) + ->create(['user_id' => $user->id]); + $this ->actingAs($user) ->postJson('/api/share', [ @@ -121,12 +121,12 @@ class UserShareTest extends TestCase */ public function it_share_folder_with_expiration_time() { - $folder = Folder::factory(Folder::class) - ->create(); - $user = User::factory(User::class) ->create(); + $folder = Folder::factory(Folder::class) + ->create(['user_id' => $user->id]); + $this ->actingAs($user) ->postJson('/api/share', [ @@ -148,12 +148,12 @@ class UserShareTest extends TestCase */ public function it_share_folder_and_send_link_for_multiple_email() { - $folder = Folder::factory(Folder::class) - ->create(); - $user = User::factory(User::class) ->create(); + $folder = Folder::factory(Folder::class) + ->create(['user_id' => $user->id]); + $this ->actingAs($user) ->postJson('/api/share', [ @@ -175,12 +175,12 @@ class UserShareTest extends TestCase */ public function it_send_existing_shared_folder_for_multiple_email_once_again() { - $folder = Folder::factory(Folder::class) - ->create(); - $user = User::factory(User::class) ->create(); + $folder = Folder::factory(Folder::class) + ->create(['user_id' => $user->id]); + Sanctum::actingAs($user); $this->postJson('/api/share', [ @@ -202,17 +202,15 @@ class UserShareTest extends TestCase /** * @test - * - * TODO: pridat test na zmazanie zip */ public function it_revoke_single_share_record() { - $folder = Folder::factory(Folder::class) - ->create(); - $user = User::factory(User::class) ->create(); + $folder = Folder::factory(Folder::class) + ->create(['user_id' => $user->id]); + Sanctum::actingAs($user); $this->postJson('/api/share', [