userid) { // ① 自己的目录 return; } $row = $this->getShareInfo(); if ($row) { if ($row->share == 1) { // ② 共享所有人的目录 return; } elseif ($row->share == 2) { // ③ 在指定共享人员内 if (FileUser::whereFileId($row->id)->whereUserid($userid)->exists()) { return; } } } throw new ApiException('没有访问权限'); } /** * 获取共享数据(含自身) * @return $this|null */ public function getShareInfo() { if ($this->share > 0) { return $this; } $pid = $this->pid; while ($pid > 0) { $row = self::whereId($pid)->first(); if (empty($row)) { break; } if ($row->share > 0) { return $row; } $pid = $row->pid; } return null; } /** * 是否处于共享目录内(不含自身) * @return bool */ public function isNnShare() { $pid = $this->pid; while ($pid > 0) { $row = self::whereId($pid)->first(); if (empty($row)) { break; } if ($row->share > 0) { return true; } $pid = $row->pid; } return false; } /** * 设置/关闭 共享(同时遍历取消里面的共享) * @param $share * @return bool */ public function setShare($share) { AbstractModel::transaction(function () use ($share) { $this->share = $share; $this->save(); $list = self::wherePid($this->id)->get(); if ($list->isNotEmpty()) { foreach ($list as $item) { $item->setShare(0); } } }); return true; } /** * 遍历删除文件(夹) * @return bool */ public function deleteFile() { AbstractModel::transaction(function () { $this->delete(); FileContent::whereFid($this->id)->delete(); $list = self::wherePid($this->id)->get(); if ($list->isNotEmpty()) { foreach ($list as $item) { $item->deleteFile(); } } }); return true; } }