From 0ca67c2348c366c40a03109081b4439c319915be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=8Carodej?= Date: Wed, 30 Mar 2022 09:34:25 +0200 Subject: [PATCH] - when member upload files or create folder in team folder, the true owner of the content is creator of team member. That means the upload bandwidth and storage go to creator responsibility --- .env.testing | 2 +- config/vuefilemanager.php | 2 +- database/factories/FileFactory.php | 4 +- ...9_161750_update_files_to_v2.0.10_table.php | 36 +++++ public/mix-manifest.json | 140 +++++++++--------- .../js/components/FilesView/InfoSidebar.vue | 6 +- .../js/components/FilesView/ItemGrid.vue | 11 +- .../js/components/FilesView/ItemList.vue | 4 +- .../js/components/Others/ThumbnailItem.vue | 4 +- resources/js/components/Others/TreeMenu.vue | 6 +- .../js/components/Spotlight/Spotlight.vue | 45 +++--- resources/js/views/User/Settings.vue | 3 +- .../Console/Commands/SetupDevEnvironment.php | 29 ---- .../UpdateUserProfileSettingsRequest.php | 2 +- src/Domain/Files/Actions/UploadFileAction.php | 25 ++-- .../FileAccess/GetFileController.php | 2 +- src/Domain/Files/Models/File.php | 11 +- src/Domain/Files/Resources/FileResource.php | 20 +-- .../Folders/Actions/CreateFolderAction.php | 28 ++-- src/Domain/Folders/Models/Folder.php | 2 +- .../Folders/Resources/FolderResource.php | 18 +-- ...ontentOwnershipToTeamFolderOwnerAction.php | 72 --------- .../Teams/Actions/UpdateMembersAction.php | 8 - .../ConvertFolderIntoTeamFolderController.php | 2 +- .../Controllers/LeaveTeamFolderController.php | 15 +- .../Demo/Actions/FakeUploadFileAction.php | 1 - tests/Domain/Browsing/BrowseTest.php | 4 - tests/Domain/Sharing/VisitorBrowseTest.php | 5 - .../Sharing/VisitorManipulatingTest.php | 5 - tests/Domain/Teams/TeamManagementTest.php | 92 ------------ tests/Domain/Teams/TeamsTest.php | 48 +++++- 31 files changed, 256 insertions(+), 396 deletions(-) create mode 100644 database/migrations/2022_03_29_161750_update_files_to_v2.0.10_table.php delete mode 100644 src/Domain/Teams/Actions/TransferContentOwnershipToTeamFolderOwnerAction.php diff --git a/.env.testing b/.env.testing index a3a55d3e..5d963ccd 100644 --- a/.env.testing +++ b/.env.testing @@ -1,6 +1,6 @@ APP_NAME=Laravel APP_ENV=local -APP_KEY=base64:Rv3QVmDH6npEiVy+pKyyjWYyTJfMvsQdFZ2YA7hAclg= +APP_KEY=base64:HHr62VlPgXN/+sC/WV0m5gZVCbzV+k1ZdpI83fJCtO4= APP_DEBUG=true APP_URL=http://localhost APP_DEMO=false diff --git a/config/vuefilemanager.php b/config/vuefilemanager.php index b0d4ebf6..dae1a527 100644 --- a/config/vuefilemanager.php +++ b/config/vuefilemanager.php @@ -1,7 +1,7 @@ '2.0.9', + 'version' => '2.0.10', 'is_demo' => env('APP_DEMO', false), diff --git a/database/factories/FileFactory.php b/database/factories/FileFactory.php index ee57c094..2a07eeda 100644 --- a/database/factories/FileFactory.php +++ b/database/factories/FileFactory.php @@ -25,6 +25,7 @@ class FileFactory extends Factory return [ 'id' => $this->faker->uuid, 'user_id' => $this->faker->uuid, + 'creator_id' => $this->faker->uuid, 'name' => $this->faker->word, 'basename' => Str::slug($this->faker->name), 'mimetype' => $this->faker->mimeType, @@ -32,9 +33,6 @@ class FileFactory extends Factory 'type' => $this->faker->randomElement( ['image', 'file', 'video', 'audio'] ), - 'author' => $this->faker->randomElement( - ['user', 'member', 'visitor'] - ), 'created_at' => $this->faker->dateTimeBetween('-36 months'), ]; } diff --git a/database/migrations/2022_03_29_161750_update_files_to_v2.0.10_table.php b/database/migrations/2022_03_29_161750_update_files_to_v2.0.10_table.php new file mode 100644 index 00000000..f2e5d6bd --- /dev/null +++ b/database/migrations/2022_03_29_161750_update_files_to_v2.0.10_table.php @@ -0,0 +1,36 @@ +dropColumn('author'); + }); + + Schema::table('files', function (Blueprint $table) { + $table->uuid('creator_id')->after('user_id')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('files', function (Blueprint $table) { + $table->dropColumn('creator_id'); + }); + } +}; diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 06651f50..2dd55f28 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -1,75 +1,75 @@ { "/js/main.js": "/js/main.js", - "/chunks/request.js": "/chunks/request.js?id=37e3e34fbcc98d4c", - "/chunks/request-upload.js": "/chunks/request-upload.js?id=2a6d910114ffb8d2", - "/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=3c2fc454c3fce8d2", - "/chunks/status-check.js": "/chunks/status-check.js?id=ea0f79fc9a604cff", - "/chunks/purchase-code.js": "/chunks/purchase-code.js?id=c1df85c34d7e9521", - "/chunks/database.js": "/chunks/database.js?id=c686d46622194c7e", - "/chunks/environment-setup.js": "/chunks/environment-setup.js?id=d045f6827f61ac9b", - "/chunks/app-setup.js": "/chunks/app-setup.js?id=c37d19ccd20b6656", - "/chunks/admin-account.js": "/chunks/admin-account.js?id=666e7ee49b02b57c", - "/chunks/shared.js": "/chunks/shared.js?id=557e8a1b4256d65a", - "/chunks/shared/browser.js": "/chunks/shared/browser.js?id=a9710655d75c8079", - "/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=7865f79c2905e81d", - "/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=ca8cc89fe5982782", - "/chunks/not-found.js": "/chunks/not-found.js?id=4cb8d3a7a2212c3c", - "/chunks/temporary-unavailable.js": "/chunks/temporary-unavailable.js?id=c71981d946a9ca71", - "/chunks/admin.js": "/chunks/admin.js?id=4264091e17e2ceed", - "/chunks/dashboard.js": "/chunks/dashboard.js?id=98dade7f03d93826", - "/chunks/invoices.js": "/chunks/invoices.js?id=70fb9a603be2f554", - "/chunks/subscriptions.js": "/chunks/subscriptions.js?id=94e96e1bb505ae59", - "/chunks/pages.js": "/chunks/pages.js?id=d1f5d211e9dfc4ae", - "/chunks/page-edit.js": "/chunks/page-edit.js?id=c241f8733acb584f", - "/chunks/plans.js": "/chunks/plans.js?id=f6e9d2f34fac6d79", - "/chunks/users.js": "/chunks/users.js?id=651b8af7afecc88e", - "/chunks/user-create.js": "/chunks/user-create.js?id=3b0c4a348a5b1857", - "/chunks/plan-create/fixed.js": "/chunks/plan-create/fixed.js?id=81dcec66b3ab0f9c", - "/chunks/plan-create/metered.js": "/chunks/plan-create/metered.js?id=e7d07663f1ec94fb", - "/chunks/user.js": "/chunks/user.js?id=dae4ac26750f99d0", - "/chunks/user-detail.js": "/chunks/user-detail.js?id=207de969e16d9284", - "/chunks/user-storage.js": "/chunks/user-storage.js?id=d56b28f604b1d012", - "/chunks/user-subscription.js": "/chunks/user-subscription.js?id=25a31d9cbbb0507a", - "/chunks/user-password.js": "/chunks/user-password.js?id=be5d5cdf90f1e0de", - "/chunks/user-delete.js": "/chunks/user-delete.js?id=0783eb95a7226ff8", - "/chunks/plan.js": "/chunks/plan.js?id=d8ffa85dc9b68966", - "/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=3010ddb4ba7419e9", - "/chunks/plan-settings.js": "/chunks/plan-settings.js?id=f41fe30f2273279c", - "/chunks/plan-delete.js": "/chunks/plan-delete.js?id=bf5e732edaff3608", - "/chunks/payments.js": "/chunks/payments.js?id=051e8246e2b5c9d0", - "/chunks/payments/billings.js": "/chunks/payments/billings.js?id=893998fa7380c5a0", - "/chunks/payments/settings.js": "/chunks/payments/settings.js?id=189bb7b91cd6a32a", - "/chunks/app-settings.js": "/chunks/app-settings.js?id=692d3291fb9d2cf7", - "/chunks/app-appearance.js": "/chunks/app-appearance.js?id=e8377974f2444a44", - "/chunks/app-index.js": "/chunks/app-index.js?id=9aadc4841d83e821", - "/chunks/app-environment.js": "/chunks/app-environment.js?id=637b39d290081e0d", - "/chunks/app-others.js": "/chunks/app-others.js?id=ac2dccb4b4a87bfb", - "/chunks/app-sign-in-out.js": "/chunks/app-sign-in-out.js?id=04fbf6846bbc6ade", - "/chunks/app-adsense.js": "/chunks/app-adsense.js?id=18842ed46783ea39", - "/chunks/app-server.js": "/chunks/app-server.js?id=6dbdc01c6b0e65b3", - "/chunks/app-language.js": "/chunks/app-language.js?id=db16d24415743d42", - "/chunks/homepage.js": "/chunks/homepage.js?id=828e3e90bf35b652", - "/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=e110e8923b6ca22f", - "/chunks/contact-us.js": "/chunks/contact-us.js?id=5ca104a75598dd39", - "/chunks/successfully-email-verified.js": "/chunks/successfully-email-verified.js?id=3153532f0d2273c8", - "/chunks/successfully-email-send.js": "/chunks/successfully-email-send.js?id=d630ed9f6f558509", - "/chunks/sign-in.js": "/chunks/sign-in.js?id=8cec25f9f11b217a", - "/chunks/sign-up.js": "/chunks/sign-up.js?id=c1cadbfd4ac0df7b", - "/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=9c62b8573fbdd567", - "/chunks/create-new-password.js": "/chunks/create-new-password.js?id=926b35b6745d99ba", - "/chunks/settings.js": "/chunks/settings.js?id=0f15f42736478feb", - "/chunks/profile.js": "/chunks/profile.js?id=013b252e73d160d0", - "/chunks/settings-password.js": "/chunks/settings-password.js?id=149343604362b7df", - "/chunks/settings-storage.js": "/chunks/settings-storage.js?id=68765cac4e648e90", - "/chunks/billing.js": "/chunks/billing.js?id=c77093c6a0dc65e3", - "/chunks/platform.js": "/chunks/platform.js?id=9d964a12c50eebea", - "/chunks/files.js": "/chunks/files.js?id=5d6eb9b9f9ecd296", - "/chunks/recent-uploads.js": "/chunks/recent-uploads.js?id=827d3a5dcce159b5", - "/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=2a4e4e0db02cbcbb", - "/chunks/trash.js": "/chunks/trash.js?id=8362aa0f91231350", - "/chunks/team-folders.js": "/chunks/team-folders.js?id=0a46fecf35a23406", - "/chunks/shared-with-me.js": "/chunks/shared-with-me.js?id=77a33583775c6d8f", - "/chunks/invitation.js": "/chunks/invitation.js?id=64a211c90b505767", + "/chunks/request.js": "/chunks/request.js?id=14b4eff14acc96f0", + "/chunks/request-upload.js": "/chunks/request-upload.js?id=5cf8338c7200a1bf", + "/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=19a0784e59d768ec", + "/chunks/status-check.js": "/chunks/status-check.js?id=51a75f0b3b260189", + "/chunks/purchase-code.js": "/chunks/purchase-code.js?id=df5bd89528649783", + "/chunks/database.js": "/chunks/database.js?id=15cc488117dccf7b", + "/chunks/environment-setup.js": "/chunks/environment-setup.js?id=e1ad83583367917a", + "/chunks/app-setup.js": "/chunks/app-setup.js?id=288594cd7f628cf8", + "/chunks/admin-account.js": "/chunks/admin-account.js?id=916450217130f3b8", + "/chunks/shared.js": "/chunks/shared.js?id=b493900394d77a9c", + "/chunks/shared/browser.js": "/chunks/shared/browser.js?id=09c2c58a5688eddb", + "/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=9ae0babfa7134c29", + "/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=672e931a9fb0b672", + "/chunks/not-found.js": "/chunks/not-found.js?id=9f6ce23ce5d969f1", + "/chunks/temporary-unavailable.js": "/chunks/temporary-unavailable.js?id=f564565faa09d6d6", + "/chunks/admin.js": "/chunks/admin.js?id=a0c8318fb3480cb0", + "/chunks/dashboard.js": "/chunks/dashboard.js?id=ec5474f5a9da434c", + "/chunks/invoices.js": "/chunks/invoices.js?id=1416cbf6d1a593ac", + "/chunks/subscriptions.js": "/chunks/subscriptions.js?id=5bf6704f5b599f36", + "/chunks/pages.js": "/chunks/pages.js?id=c8380d571e91e8be", + "/chunks/page-edit.js": "/chunks/page-edit.js?id=fb3f9eda3dc1d15c", + "/chunks/plans.js": "/chunks/plans.js?id=c8506e0e20966ef7", + "/chunks/users.js": "/chunks/users.js?id=ec687ee365c4248a", + "/chunks/user-create.js": "/chunks/user-create.js?id=8dd9d29f024132f5", + "/chunks/plan-create/fixed.js": "/chunks/plan-create/fixed.js?id=b24d8dbe1f0f706f", + "/chunks/plan-create/metered.js": "/chunks/plan-create/metered.js?id=d9f1bcb1fe44a6ae", + "/chunks/user.js": "/chunks/user.js?id=c191b906a0496fe5", + "/chunks/user-detail.js": "/chunks/user-detail.js?id=f9e17ff98354e984", + "/chunks/user-storage.js": "/chunks/user-storage.js?id=a8e0bce4703232a0", + "/chunks/user-subscription.js": "/chunks/user-subscription.js?id=27d046c1122783ea", + "/chunks/user-password.js": "/chunks/user-password.js?id=23d3aee39f539a3c", + "/chunks/user-delete.js": "/chunks/user-delete.js?id=6bea6f8cadf4d74f", + "/chunks/plan.js": "/chunks/plan.js?id=4b267375ea9f19b3", + "/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=a956ceca6865c50c", + "/chunks/plan-settings.js": "/chunks/plan-settings.js?id=715ee86991d5e4db", + "/chunks/plan-delete.js": "/chunks/plan-delete.js?id=1ad77372d342326f", + "/chunks/payments.js": "/chunks/payments.js?id=dc4586691c25de6f", + "/chunks/payments/billings.js": "/chunks/payments/billings.js?id=dd6c9d6a29a47808", + "/chunks/payments/settings.js": "/chunks/payments/settings.js?id=5b139952f337c83e", + "/chunks/app-settings.js": "/chunks/app-settings.js?id=55da23af2b076069", + "/chunks/app-appearance.js": "/chunks/app-appearance.js?id=a694a01f3641712c", + "/chunks/app-index.js": "/chunks/app-index.js?id=efdbfa062749ca00", + "/chunks/app-environment.js": "/chunks/app-environment.js?id=9632034e8ded7d34", + "/chunks/app-others.js": "/chunks/app-others.js?id=0f84e2ed1230558e", + "/chunks/app-sign-in-out.js": "/chunks/app-sign-in-out.js?id=1cfffc99465b9a7a", + "/chunks/app-adsense.js": "/chunks/app-adsense.js?id=a5dc9e715f8561bd", + "/chunks/app-server.js": "/chunks/app-server.js?id=4510d63685353c68", + "/chunks/app-language.js": "/chunks/app-language.js?id=7e5f3d5ec447e397", + "/chunks/homepage.js": "/chunks/homepage.js?id=b6597181c9e4353d", + "/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=2504793131107b1f", + "/chunks/contact-us.js": "/chunks/contact-us.js?id=9adc7e145be4e160", + "/chunks/successfully-email-verified.js": "/chunks/successfully-email-verified.js?id=25b805ade5230382", + "/chunks/successfully-email-send.js": "/chunks/successfully-email-send.js?id=f4562229776d9f56", + "/chunks/sign-in.js": "/chunks/sign-in.js?id=0d48d229038a3a1e", + "/chunks/sign-up.js": "/chunks/sign-up.js?id=bb92bad614e60d45", + "/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=50a1bc5e4ed86ec9", + "/chunks/create-new-password.js": "/chunks/create-new-password.js?id=f652de052dba55c1", + "/chunks/settings.js": "/chunks/settings.js?id=9e0671d49295178e", + "/chunks/profile.js": "/chunks/profile.js?id=0eca231475e267ab", + "/chunks/settings-password.js": "/chunks/settings-password.js?id=11d4331650cac280", + "/chunks/settings-storage.js": "/chunks/settings-storage.js?id=994b669a56fd417b", + "/chunks/billing.js": "/chunks/billing.js?id=4ea77ab501b8c575", + "/chunks/platform.js": "/chunks/platform.js?id=9d926efeacb4d530", + "/chunks/files.js": "/chunks/files.js?id=053fc46f0a783697", + "/chunks/recent-uploads.js": "/chunks/recent-uploads.js?id=aefaf719fbafa603", + "/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=ea72dbc73a771e4a", + "/chunks/trash.js": "/chunks/trash.js?id=6bc564374cb24449", + "/chunks/team-folders.js": "/chunks/team-folders.js?id=f2c2722451de236c", + "/chunks/shared-with-me.js": "/chunks/shared-with-me.js?id=fcf601ec2d9e3318", + "/chunks/invitation.js": "/chunks/invitation.js?id=9ed8456c9d6d5ce1", "/css/tailwind.css": "/css/tailwind.css", "/css/app.css": "/css/app.css" } diff --git a/resources/js/components/FilesView/InfoSidebar.vue b/resources/js/components/FilesView/InfoSidebar.vue index 27ac1730..b19342a9 100644 --- a/resources/js/components/FilesView/InfoSidebar.vue +++ b/resources/js/components/FilesView/InfoSidebar.vue @@ -87,9 +87,9 @@
- + - {{ singleFile.data.relationships.owner.data.attributes.name }} + {{ singleFile.data.relationships.creator.data.attributes.name }}
@@ -160,7 +160,7 @@ import { mapGetters } from 'vuex' return ( this.$isThisRoute(this.$route, ['SharedWithMe', 'TeamFolders']) && this.clipboard[0].data.type !== 'folder' && - this.user.data.id !== this.clipboard[0].data.relationships.owner.data.id + this.user.data.id !== this.clipboard[0].data.relationships.creator.data.id ) }, }, diff --git a/resources/js/components/FilesView/ItemGrid.vue b/resources/js/components/FilesView/ItemGrid.vue index 51bff6d5..90735258 100644 --- a/resources/js/components/FilesView/ItemGrid.vue +++ b/resources/js/components/FilesView/ItemGrid.vue @@ -38,7 +38,7 @@ v-if="user && canShowAuthor" :size="38" :is-border="true" - :member="entry.data.relationships.owner" + :member="entry.data.relationships.creator" class="absolute right-2 -bottom-5 z-10 z-10 scale-75 transform lg:-bottom-7 lg:scale-100" /> @@ -58,7 +58,7 @@ v-if="user && canShowAuthor" :size="38" :is-border="true" - :member="entry.data.relationships.owner" + :member="entry.data.relationships.creator" class="absolute -right-3 -bottom-2.5 z-10 scale-75 transform lg:scale-100" /> @@ -200,9 +200,10 @@ export default { }, canShowAuthor() { return ( - this.$isThisRoute(this.$route, ['SharedWithMe', 'TeamFolders']) && - !this.isFolder && - this.user.data.id !== this.entry.data.relationships.owner.data.id + this.$isThisRoute(this.$route, ['SharedWithMe', 'TeamFolders']) + && !this.isFolder + && this.entry.data.relationships.creator + && this.user.data.id !== this.entry.data.relationships.creator.data.id ) }, canShowLinkIcon() { diff --git a/resources/js/components/FilesView/ItemList.vue b/resources/js/components/FilesView/ItemList.vue index c630319f..2ec34e04 100644 --- a/resources/js/components/FilesView/ItemList.vue +++ b/resources/js/components/FilesView/ItemList.vue @@ -18,7 +18,7 @@ v-if="user && canShowAuthor" :size="28" :is-border="true" - :member="entry.data.relationships.owner" + :member="entry.data.relationships.creator" class="absolute right-1.5 -bottom-2 z-10" /> @@ -183,7 +183,7 @@ export default { : this.entry.data.attributes.items }, canShowAuthor() { - return !this.isFolder && this.user.data.id !== this.entry.data.relationships.owner.data.id + return !this.isFolder && this.entry.data.relationships.creator && this.user.data.id !== this.entry.data.relationships.creator.data.id }, canDrag() { return !this.isDeleted && this.$checkPermission(['master', 'editor']) diff --git a/resources/js/components/Others/ThumbnailItem.vue b/resources/js/components/Others/ThumbnailItem.vue index f0989386..61826135 100644 --- a/resources/js/components/Others/ThumbnailItem.vue +++ b/resources/js/components/Others/ThumbnailItem.vue @@ -7,7 +7,7 @@ v-if="user && canShowAuthor" :size="28" :is-border="true" - :member="item.data.relationships.owner" + :member="item.data.relationships.creator" class="absolute right-1.5 -bottom-2 z-10" /> @@ -130,7 +130,7 @@ export default { : this.item.data.attributes.items }, canShowAuthor() { - return !this.isFolder && this.user.data.id !== this.item.data.relationships.owner.data.id + return !this.isFolder && this.user.data.id !== this.item.data.relationships.creator.data.id }, canDrag() { return !this.isDeleted && this.$checkPermission(['master', 'editor']) diff --git a/resources/js/components/Others/TreeMenu.vue b/resources/js/components/Others/TreeMenu.vue index f83f9130..e2526913 100644 --- a/resources/js/components/Others/TreeMenu.vue +++ b/resources/js/components/Others/TreeMenu.vue @@ -1,13 +1,13 @@