diff --git a/app/Http/Controllers/Api/FileController.php b/app/Http/Controllers/Api/FileController.php index bfa76f713..ab5527e24 100755 --- a/app/Http/Controllers/Api/FileController.php +++ b/app/Http/Controllers/Api/FileController.php @@ -853,10 +853,7 @@ class FileController extends AbstractController // 取消共享 $action = "delete"; foreach ($userids as $userid) { - if (FileUser::where([ - 'file_id' => $file->id, - 'userid' => $userid, - ])->delete()) { + if (FileUser::deleteFileUser($file->id, $userid)) { $array[] = $userid; } } @@ -864,7 +861,7 @@ class FileController extends AbstractController // 设置共享 $action = "update"; if ($force === 0) { - if (File::where('pids', 'like', ",{$file->id},")->whereShare(1)->exists()) { + if (File::where("pids", "like", "%,{$file->id},%")->whereShare(1)->exists()) { return Base::retError('此文件夹内已有共享文件夹', [], -3001); } } @@ -913,16 +910,10 @@ class FileController extends AbstractController if ($file->userid == $user->userid) { return Base::retError('不能退出自己共享的文件'); } - if (FileUser::where([ - 'file_id' => $file->id, - 'userid' => 0, - ])->exists()) { + if (FileUser::whereFileId($file->id)->whereUserid(0)->exists()) { return Base::retError('无法退出共享所有人的文件或文件夹'); } - FileUser::where([ - 'file_id' => $file->id, - 'userid' => $user->userid, - ])->delete(); + FileUser::deleteFileUser($file->id, $user->userid); // $file->updataShare(); return Base::retSuccess("退出成功"); @@ -947,20 +938,21 @@ class FileController extends AbstractController */ public function link() { - User::auth(); + $user = User::auth(); // $id = intval(Request::input('id')); $refresh = Request::input('refresh', 'no'); // - $file = File::permissionFind($id, 1000); + $file = File::permissionFind($id); if ($file->type == 'folder') { return Base::retError('文件夹暂不支持此功能'); } // - $fileLink = FileLink::whereFileId($file->id)->first(); + $fileLink = FileLink::whereFileId($file->id)->whereUserid($user->userid)->first(); if (empty($fileLink)) { $fileLink = FileLink::createInstance([ 'file_id' => $file->id, + 'userid' => $user->userid, 'code' => Base::generatePassword(64), ]); $fileLink->save(); diff --git a/app/Models/File.php b/app/Models/File.php index 9728d85e9..db85f4778 100644 --- a/app/Models/File.php +++ b/app/Models/File.php @@ -168,7 +168,7 @@ class File extends AbstractModel $this->share = $share; $this->save(); if ($share === 0) { - FileUser::whereFileId($this->id)->delete(); + FileUser::deleteFileAll($this->id, $this->userid); } $list = self::wherePid($this->id)->get(); if ($list->isNotEmpty()) { @@ -224,8 +224,7 @@ class File extends AbstractModel AbstractModel::transaction(function () { $this->delete(); $this->pushMsg('delete'); - FileLink::whereFileId($this->id)->delete(); - FileUser::whereFileId($this->id)->delete(); + FileUser::deleteFileAll($this->id); FileContent::whereFid($this->id)->delete(); $list = self::wherePid($this->id)->get(); if ($list->isNotEmpty()) { diff --git a/app/Models/FileUser.php b/app/Models/FileUser.php index 5b35960fe..021e632f0 100644 --- a/app/Models/FileUser.php +++ b/app/Models/FileUser.php @@ -25,4 +25,34 @@ namespace App\Models; */ class FileUser extends AbstractModel { + /** + * 删除所有共享成员(同时删除成员分享的链接) + * @param $file_id + * @param int $retain_link_userid 保留指定会员的链接 + * @return mixed + */ + public static function deleteFileAll($file_id, $retain_link_userid = 0) + { + return AbstractModel::transaction(function() use ($retain_link_userid, $file_id) { + if ($retain_link_userid > 0) { + FileLink::whereFileId($file_id)->where('userid', '!=', $retain_link_userid)->delete(); + } else { + FileLink::whereFileId($file_id)->delete(); + } + FileUser::whereFileId($file_id)->delete(); + }); + } + /** + * 删除指定共享成员(同时删除成员分享的链接) + * @param $file_id + * @param $userid + * @return mixed + */ + public static function deleteFileUser($file_id, $userid) + { + return AbstractModel::transaction(function() use ($userid, $file_id) { + FileLink::whereFileId($file_id)->whereUserid($userid)->delete(); + return self::whereFileId($file_id)->whereUserid($userid)->delete(); + }); + } } diff --git a/database/migrations/2022_03_31_093754_add_file_links_userid.php b/database/migrations/2022_03_31_093754_add_file_links_userid.php new file mode 100644 index 000000000..e72210a53 --- /dev/null +++ b/database/migrations/2022_03_31_093754_add_file_links_userid.php @@ -0,0 +1,34 @@ +integer('userid')->nullable()->default(0)->after('code')->comment('会员ID'); + } + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('file_links', function (Blueprint $table) { + $table->dropColumn("userid"); + }); + } +} diff --git a/resources/assets/js/pages/manage/file.vue b/resources/assets/js/pages/manage/file.vue index e244a7d61..062388b76 100644 --- a/resources/assets/js/pages/manage/file.vue +++ b/resources/assets/js/pages/manage/file.vue @@ -146,6 +146,7 @@