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 @@
{{$L('打开')}}
{{$L(selectIds.includes(contextMenuItem.id) ? '取消选择' : '选择')}}
+
{{$L('新建')}}
@@ -161,17 +162,16 @@
+
{{$L('重命名')}}
{{$L('复制')}}
{{$L('剪切')}}
-
- {{$L('共享')}}
- {{$L('链接')}}
-
-
- {{$L('退出共享')}}
-
+
+ {{$L('共享')}}
+ {{$L('退出共享')}}
+ {{$L('链接')}}
{{$L('下载')}}
+
{{$L('删除')}}
@@ -722,11 +722,6 @@ export default {
size: 20
},
}))
- if (row.permission == 0) {
- iconArray.push(h('span', {
- class: 'permission',
- }, this.$L('只读')))
- }
} else {
iconArray.push(h('i', {
class: 'taskfont',
@@ -1304,7 +1299,7 @@ export default {
})
},
- upShare(item) {
+ upShare(item, force = false) {
if (item.loading === true) {
return;
}
@@ -1316,6 +1311,7 @@ export default {
id: this.shareInfo.id,
userids: [item.userid],
permission: item.permission,
+ force: force === true ? 1 : 0
},
}).then(({data, msg}) => {
item.loading = false;
@@ -1330,15 +1326,18 @@ export default {
}
}).catch(({ret, msg}) => {
item.loading = false;
- item.permission = item._permission;
if (ret === -3001) {
$A.modalConfirm({
content: '此文件夹内已有共享文件夹,子文件的共享状态将被取消,是否继续?',
onOk: () => {
- this.onShare(true)
+ this.upShare(item, true)
+ },
+ onCancel: () => {
+ item.permission = item._permission;
}
})
} else {
+ item.permission = item._permission;
$A.modalError(msg, force === true ? 301 : 0)
}
})