diff --git a/app/Http/Controllers/Api/FileController.php b/app/Http/Controllers/Api/FileController.php index ad351d6f..8e4f224a 100755 --- a/app/Http/Controllers/Api/FileController.php +++ b/app/Http/Controllers/Api/FileController.php @@ -8,12 +8,10 @@ use App\Models\File; use App\Models\FileContent; use App\Models\FileUser; use App\Models\User; -use App\Models\WebSocket; use App\Module\Base; use App\Module\Ihttp; -use Arr; +use Illuminate\Support\Facades\DB; use Request; -use Response; /** * @apiDefine file @@ -56,10 +54,17 @@ class FileController extends AbstractController } } else { // 获取共享相关 - $list = File::select(['files.*', 'file_users.permission']) + DB::statement("SET SQL_MODE=''"); + $pre = DB::connection()->getTablePrefix(); + $list = File::select(["files.*", DB::raw("MAX({$pre}file_users.permission) as permission")]) ->join('file_users', 'files.id', '=', 'file_users.file_id') ->where('files.userid', '!=', $user->userid) - ->where('file_users.userid', $user->userid) + ->where(function ($query) use ($user) { + $query->where('file_users.userid', 0); + $query->orWhere('file_users.userid', $user->userid); + }) + ->groupBy('files.id') + ->take(100) ->get(); if ($list->isNotEmpty()) { foreach ($list as $file) { @@ -556,7 +561,6 @@ class FileController extends AbstractController // 取消共享 $action = "delete"; foreach ($userids as $userid) { - if (!intval($userid)) continue; if (FileUser::where([ 'file_id' => $file->id, 'userid' => $userid, @@ -571,8 +575,6 @@ class FileController extends AbstractController return Base::retError('共享人数上限100个成员'); } foreach ($userids as $userid) { - if (!intval($userid)) continue; - if (!User::whereUserid($userid)->exists()) continue; if (FileUser::updateInsert([ 'file_id' => $file->id, 'userid' => $userid, diff --git a/app/Models/File.php b/app/Models/File.php index d8a97b6c..f219a76d 100644 --- a/app/Models/File.php +++ b/app/Models/File.php @@ -56,7 +56,7 @@ class File extends AbstractModel */ public function exceAllow($userid) { - if (!$this->chackAllow($userid)) { + if ($this->chackAllow($userid) === -1) { throw new ApiException('没有访问权限'); } } @@ -66,22 +66,26 @@ class File extends AbstractModel * ① 自己的文件夹 * ② 在指定共享成员内 * @param $userid - * @return bool + * @return int -1:没有权限,0:只读,1:读写 */ public function chackAllow($userid) { if ($userid == $this->userid) { // ① 自己的文件夹 - return true; + return 1; } $row = $this->getShareInfo(); if ($row) { - if (FileUser::whereFileId($row->id)->whereUserid($userid)->exists()) { + $fileUser = FileUser::whereFileId($row->id)->where(function ($query) use ($userid) { + $query->where('userid', 0); + $query->orWhere('userid', $userid); + })->orderByDesc('permission')->first(); + if ($fileUser) { // ② 在指定共享成员内 - return true; + return $fileUser->permission; } } - return false; + return -1; } /** diff --git a/resources/assets/js/pages/manage/file.vue b/resources/assets/js/pages/manage/file.vue index 863f1856..b12ee331 100644 --- a/resources/assets/js/pages/manage/file.vue +++ b/resources/assets/js/pages/manage/file.vue @@ -72,10 +72,11 @@
@@ -207,9 +208,9 @@ :disabledChoice="shareAlready" :multiple-max="100" :placeholder="$L('选择共享成员')"> -