mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-05-24 05:34:43 +00:00
Guardian and FileManagerService.php refactored
This commit is contained in:
@@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Http\Tools\Guardian;
|
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Models\Zip;
|
use App\Models\Zip;
|
||||||
|
use App\Services\HelperService;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\File;
|
use Illuminate\Support\Facades\File;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -13,6 +13,13 @@ use Illuminate\Support\Facades\Storage;
|
|||||||
|
|
||||||
class FileAccessController extends Controller
|
class FileAccessController extends Controller
|
||||||
{
|
{
|
||||||
|
private $helper;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->helper = resolve(HelperService::class);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get avatar
|
* Get avatar
|
||||||
*
|
*
|
||||||
@@ -250,7 +257,7 @@ class FileAccessController extends Controller
|
|||||||
{
|
{
|
||||||
// Check by parent folder permission
|
// Check by parent folder permission
|
||||||
if ($shared->type === 'folder') {
|
if ($shared->type === 'folder') {
|
||||||
Guardian::check_item_access($file->folder_id, $shared);
|
$this->helper->check_item_access($file->folder_id, $shared);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check by single file permission
|
// Check by single file permission
|
||||||
|
|||||||
@@ -8,13 +8,13 @@ use App\Http\Requests\FileFunctions\RenameItemRequest;
|
|||||||
use App\Http\Requests\FileFunctions\MoveItemRequest;
|
use App\Http\Requests\FileFunctions\MoveItemRequest;
|
||||||
use App\Http\Requests\FileFunctions\UploadRequest;
|
use App\Http\Requests\FileFunctions\UploadRequest;
|
||||||
use App\Http\Tools\Demo;
|
use App\Http\Tools\Demo;
|
||||||
|
use App\Services\FileManagerService;
|
||||||
|
use App\Services\HelperService;
|
||||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Http\Tools\Guardian;
|
|
||||||
use App\Http\Tools\FileManagerService;
|
|
||||||
use App\Models\Folder;
|
use App\Models\Folder;
|
||||||
use App\Models\File;
|
use App\Models\File;
|
||||||
use Exception;
|
use Exception;
|
||||||
@@ -22,6 +22,15 @@ use Exception;
|
|||||||
|
|
||||||
class EditItemsController extends Controller
|
class EditItemsController extends Controller
|
||||||
{
|
{
|
||||||
|
private $filemanager;
|
||||||
|
private $helper;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->filemanager = resolve(FileManagerService::class);
|
||||||
|
$this->helper = resolve(HelperService::class);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create new folder for authenticated master|editor user
|
* Create new folder for authenticated master|editor user
|
||||||
*
|
*
|
||||||
@@ -46,11 +55,11 @@ class EditItemsController extends Controller
|
|||||||
$shared = get_shared($request->cookie('shared_token'));
|
$shared = get_shared($request->cookie('shared_token'));
|
||||||
|
|
||||||
// Check access to requested directory
|
// Check access to requested directory
|
||||||
Guardian::check_item_access($request->parent_id, $shared);
|
$this->helper->check_item_access($request->parent_id, $shared);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create new folder
|
// Create new folder
|
||||||
return FileManagerService::create_folder($request);
|
return $this->filemanager->create_folder($request);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -74,10 +83,10 @@ class EditItemsController extends Controller
|
|||||||
if (!is_editor($shared)) abort(403);
|
if (!is_editor($shared)) abort(403);
|
||||||
|
|
||||||
// Check access to requested directory
|
// Check access to requested directory
|
||||||
Guardian::check_item_access($request->parent_id, $shared);
|
$this->helper->check_item_access($request->parent_id, $shared);
|
||||||
|
|
||||||
// Create folder
|
// Create folder
|
||||||
return FileManagerService::create_folder($request, $shared);
|
return $this->filemanager->create_folder($request, $shared);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -109,19 +118,19 @@ class EditItemsController extends Controller
|
|||||||
|
|
||||||
// Check access to requested directory
|
// Check access to requested directory
|
||||||
if ($request->type === 'folder') {
|
if ($request->type === 'folder') {
|
||||||
Guardian::check_item_access($item->id, $shared);
|
$this->helper->check_item_access($item->id, $shared);
|
||||||
} else {
|
} else {
|
||||||
Guardian::check_item_access($item->folder_id, $shared);
|
$this->helper->check_item_access($item->folder_id, $shared);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If request have a change folder icon values set the folder icon
|
// If request have a change folder icon values set the folder icon
|
||||||
if ($request->type === 'folder' && ($request->filled('emoji') || $request->filled('color'))) {
|
if ($request->type === 'folder' && ($request->filled('emoji') || $request->filled('color'))) {
|
||||||
FileManagerService::set_folder_icon($request, $id);
|
$this->filemanager->set_folder_icon($request, $id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rename Item
|
// Rename Item
|
||||||
return FileManagerService::rename_item($request, $id);
|
return $this->filemanager->rename_item($request, $id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -153,18 +162,18 @@ class EditItemsController extends Controller
|
|||||||
|
|
||||||
// Check access to requested item
|
// Check access to requested item
|
||||||
if ($request->type === 'folder') {
|
if ($request->type === 'folder') {
|
||||||
Guardian::check_item_access($item->id, $shared);
|
$this->helper->check_item_access($item->id, $shared);
|
||||||
} else {
|
} else {
|
||||||
Guardian::check_item_access($item->folder_id, $shared);
|
$this->helper->check_item_access($item->folder_id, $shared);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If request have a change folder icon values set the folder icon
|
// If request have a change folder icon values set the folder icon
|
||||||
if ($request->type === 'folder' && $request->filled('icon')) {
|
if ($request->type === 'folder' && $request->filled('icon')) {
|
||||||
FileManagerService::set_folder_icon($request, $id);
|
$this->filemanager->set_folder_icon($request, $id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rename item
|
// Rename item
|
||||||
$item = FileManagerService::rename_item($request, $id, $shared);
|
$item = $this->filemanager->rename_item($request, $id, $shared);
|
||||||
|
|
||||||
// Set public url
|
// Set public url
|
||||||
if ($item->type !== 'folder') {
|
if ($item->type !== 'folder') {
|
||||||
@@ -208,14 +217,14 @@ class EditItemsController extends Controller
|
|||||||
|
|
||||||
// Check access to requested directory
|
// Check access to requested directory
|
||||||
if ($item['type'] === 'folder') {
|
if ($item['type'] === 'folder') {
|
||||||
Guardian::check_item_access($item->id, $shared);
|
$this->helper->check_item_access($item->id, $shared);
|
||||||
} else {
|
} else {
|
||||||
Guardian::check_item_access($item->folder_id, $shared);
|
$this->helper->check_item_access($item->folder_id, $shared);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete item
|
// Delete item
|
||||||
FileManagerService::delete_item($item, $item['id']);
|
$this->filemanager->delete_item($item, $item['id']);
|
||||||
}
|
}
|
||||||
|
|
||||||
return response(null, 204);
|
return response(null, 204);
|
||||||
@@ -252,13 +261,13 @@ class EditItemsController extends Controller
|
|||||||
|
|
||||||
// Check access to requested item
|
// Check access to requested item
|
||||||
if ($file['type'] === 'folder') {
|
if ($file['type'] === 'folder') {
|
||||||
Guardian::check_item_access($item->id, $shared);
|
$this->helper->check_item_access($item->id, $shared);
|
||||||
} else {
|
} else {
|
||||||
Guardian::check_item_access($item->folder_id, $shared);
|
$this->helper->check_item_access($item->folder_id, $shared);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete item
|
// Delete item
|
||||||
FileManagerService::delete_item($file, $file['id'], $shared);
|
$this->filemanager->delete_item($file, $file['id'], $shared);
|
||||||
}
|
}
|
||||||
// Return response
|
// Return response
|
||||||
return response('Done', 204);
|
return response('Done', 204);
|
||||||
@@ -288,11 +297,11 @@ class EditItemsController extends Controller
|
|||||||
$shared = get_shared($request->cookie('shared_token'));
|
$shared = get_shared($request->cookie('shared_token'));
|
||||||
|
|
||||||
// Check access to requested directory
|
// Check access to requested directory
|
||||||
Guardian::check_item_access($request->parent_id, $shared);
|
$this->helper->check_item_access($request->parent_id, $shared);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return new uploaded file
|
// Return new uploaded file
|
||||||
return FileManagerService::upload($request);
|
return $this->filemanager->upload($request);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -319,10 +328,10 @@ class EditItemsController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check access to requested directory
|
// Check access to requested directory
|
||||||
Guardian::check_item_access($request->folder_id, $shared);
|
$this->helper->check_item_access($request->folder_id, $shared);
|
||||||
|
|
||||||
// Return new uploaded file
|
// Return new uploaded file
|
||||||
$new_file = FileManagerService::upload($request, $shared);
|
$new_file = $this->filemanager->upload($request, $shared);
|
||||||
|
|
||||||
// Set public access url
|
// Set public access url
|
||||||
$new_file->setPublicUrl($token);
|
$new_file->setPublicUrl($token);
|
||||||
@@ -352,7 +361,7 @@ class EditItemsController extends Controller
|
|||||||
$shared = get_shared($request->cookie('shared_token'));
|
$shared = get_shared($request->cookie('shared_token'));
|
||||||
|
|
||||||
// Check access to requested directory
|
// Check access to requested directory
|
||||||
Guardian::check_item_access($id, $shared);
|
$this->helper->check_item_access($id, $shared);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get folder
|
// Get folder
|
||||||
@@ -363,7 +372,7 @@ class EditItemsController extends Controller
|
|||||||
abort(404, 'Requested folder doesn\'t exists.');
|
abort(404, 'Requested folder doesn\'t exists.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$zip = FileManagerService::zip_folder($id);
|
$zip = $this->filemanager->zip_folder($id);
|
||||||
|
|
||||||
// Get file
|
// Get file
|
||||||
return response([
|
return response([
|
||||||
@@ -386,7 +395,7 @@ class EditItemsController extends Controller
|
|||||||
$shared = get_shared($token);
|
$shared = get_shared($token);
|
||||||
|
|
||||||
// Check access to requested folder
|
// Check access to requested folder
|
||||||
Guardian::check_item_access($id, $shared);
|
$this->helper->check_item_access($id, $shared);
|
||||||
|
|
||||||
// Get folder
|
// Get folder
|
||||||
$folder = Folder::whereUserId($shared->user_id)
|
$folder = Folder::whereUserId($shared->user_id)
|
||||||
@@ -396,7 +405,7 @@ class EditItemsController extends Controller
|
|||||||
abort(404, 'Requested folder doesn\'t exists.');
|
abort(404, 'Requested folder doesn\'t exists.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$zip = FileManagerService::zip_folder($id, $shared);
|
$zip = $this->filemanager->zip_folder($id, $shared);
|
||||||
|
|
||||||
// Get file
|
// Get file
|
||||||
return response([
|
return response([
|
||||||
@@ -432,7 +441,7 @@ class EditItemsController extends Controller
|
|||||||
->toArray();
|
->toArray();
|
||||||
|
|
||||||
// Check access to requested directory
|
// Check access to requested directory
|
||||||
Guardian::check_item_access($file_parent_folders, $shared);
|
$this->helper->check_item_access($file_parent_folders, $shared);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get requested files
|
// Get requested files
|
||||||
@@ -440,7 +449,7 @@ class EditItemsController extends Controller
|
|||||||
->whereIn('id', $request->input('items'))
|
->whereIn('id', $request->input('items'))
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
$zip = FileManagerService::zip_files($files);
|
$zip = $this->filemanager->zip_files($files);
|
||||||
|
|
||||||
// Get file
|
// Get file
|
||||||
return response([
|
return response([
|
||||||
@@ -468,14 +477,14 @@ class EditItemsController extends Controller
|
|||||||
->toArray();
|
->toArray();
|
||||||
|
|
||||||
// Check access to requested directory
|
// Check access to requested directory
|
||||||
Guardian::check_item_access($file_parent_folders, $shared);
|
$this->helper->check_item_access($file_parent_folders, $shared);
|
||||||
|
|
||||||
// Get requested files
|
// Get requested files
|
||||||
$files = File::whereUserId($shared->user_id)
|
$files = File::whereUserId($shared->user_id)
|
||||||
->whereIn('id', $request->items)
|
->whereIn('id', $request->items)
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
$zip = FileManagerService::zip_files($files, $shared);
|
$zip = $this->filemanager->zip_files($files, $shared);
|
||||||
|
|
||||||
// Get file
|
// Get file
|
||||||
return response([
|
return response([
|
||||||
@@ -513,11 +522,11 @@ class EditItemsController extends Controller
|
|||||||
$shared = get_shared($request->cookie('shared_token'));
|
$shared = get_shared($request->cookie('shared_token'));
|
||||||
|
|
||||||
// Check access to requested directory
|
// Check access to requested directory
|
||||||
Guardian::check_item_access($to_id, $shared);
|
$this->helper->check_item_access($to_id, $shared);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move item
|
// Move item
|
||||||
FileManagerService::move($request, $to_id);
|
$this->filemanager->move($request, $to_id);
|
||||||
|
|
||||||
return response('Done!', 204);
|
return response('Done!', 204);
|
||||||
}
|
}
|
||||||
@@ -549,7 +558,7 @@ class EditItemsController extends Controller
|
|||||||
|
|
||||||
if ($item['type'] === 'folder') {
|
if ($item['type'] === 'folder') {
|
||||||
|
|
||||||
Guardian::check_item_access([
|
$this->helper->check_item_access([
|
||||||
$request->to_id, $item['id']
|
$request->to_id, $item['id']
|
||||||
], $shared);
|
], $shared);
|
||||||
}
|
}
|
||||||
@@ -560,13 +569,13 @@ class EditItemsController extends Controller
|
|||||||
->where('user_id', $shared->user_id)
|
->where('user_id', $shared->user_id)
|
||||||
->firstOrFail();
|
->firstOrFail();
|
||||||
|
|
||||||
Guardian::check_item_access([
|
$this->helper->check_item_access([
|
||||||
$request->to_id, $file->folder_id
|
$request->to_id, $file->folder_id
|
||||||
], $shared);
|
], $shared);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FileManagerService::move($request, $request->to_id);
|
$this->filemanager->move($request, $request->to_id);
|
||||||
|
|
||||||
return response('Done!', 204);
|
return response('Done!', 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,10 +5,9 @@ namespace App\Http\Controllers\Sharing;
|
|||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Http\Requests\Share\AuthenticateShareRequest;
|
use App\Http\Requests\Share\AuthenticateShareRequest;
|
||||||
use App\Http\Resources\ShareResource;
|
use App\Http\Resources\ShareResource;
|
||||||
use App\Http\Tools\Guardian;
|
|
||||||
use App\Models\Share;
|
use App\Models\Share;
|
||||||
use App\Models\Setting;
|
use App\Models\Setting;
|
||||||
use Illuminate\Contracts\View\Factory;
|
use App\Services\HelperService;
|
||||||
use Illuminate\Support\Facades\Cookie;
|
use Illuminate\Support\Facades\Cookie;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Hash;
|
use Illuminate\Support\Facades\Hash;
|
||||||
@@ -22,6 +21,12 @@ use Illuminate\Support\Facades\Storage;
|
|||||||
|
|
||||||
class FileSharingController extends Controller
|
class FileSharingController extends Controller
|
||||||
{
|
{
|
||||||
|
private $helper;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->helper = resolve(HelperService::class);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show page index and delete access_token & shared_token cookie
|
* Show page index and delete access_token & shared_token cookie
|
||||||
@@ -152,7 +157,7 @@ class FileSharingController extends Controller
|
|||||||
$shared = Share::where('token', $request->cookie('shared_token'))->firstOrFail();
|
$shared = Share::where('token', $request->cookie('shared_token'))->firstOrFail();
|
||||||
|
|
||||||
// Check if user can get directory
|
// Check if user can get directory
|
||||||
Guardian::check_item_access($id, $shared);
|
$this->helper->check_item_access($id, $shared);
|
||||||
|
|
||||||
// Get files and folders
|
// Get files and folders
|
||||||
list($folders, $files) = $this->get_items($id, $shared);
|
list($folders, $files) = $this->get_items($id, $shared);
|
||||||
@@ -178,7 +183,7 @@ class FileSharingController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check if user can get directory
|
// Check if user can get directory
|
||||||
Guardian::check_item_access($id, $shared);
|
$this->helper->check_item_access($id, $shared);
|
||||||
|
|
||||||
// Get files and folders
|
// Get files and folders
|
||||||
list($folders, $files) = $this->get_items($id, $shared);
|
list($folders, $files) = $this->get_items($id, $shared);
|
||||||
@@ -250,7 +255,7 @@ class FileSharingController extends Controller
|
|||||||
$shared = get_shared($request->cookie('shared_token'));
|
$shared = get_shared($request->cookie('shared_token'));
|
||||||
|
|
||||||
// Check if user can get directory
|
// Check if user can get directory
|
||||||
Guardian::check_item_access($shared->item_id, $shared);
|
$this->helper->check_item_access($shared->item_id, $shared);
|
||||||
|
|
||||||
// Get folders
|
// Get folders
|
||||||
$folders = Folder::with('folders:id,parent_id,unique_id,name')
|
$folders = Folder::with('folders:id,parent_id,unique_id,name')
|
||||||
@@ -281,7 +286,7 @@ class FileSharingController extends Controller
|
|||||||
$shared = get_shared($token);
|
$shared = get_shared($token);
|
||||||
|
|
||||||
// Check if user can get directory
|
// Check if user can get directory
|
||||||
Guardian::check_item_access($shared->item_id, $shared);
|
$this->helper->check_item_access($shared->item_id, $shared);
|
||||||
|
|
||||||
// Get folders
|
// Get folders
|
||||||
$folders = Folder::with('folders:id,parent_id,name')
|
$folders = Folder::with('folders:id,parent_id,name')
|
||||||
|
|||||||
@@ -1,42 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Tools;
|
|
||||||
|
|
||||||
use App;
|
|
||||||
use App\Models\Folder;
|
|
||||||
use Illuminate\Support\Arr;
|
|
||||||
|
|
||||||
|
|
||||||
class Guardian
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Check access to requested directory
|
|
||||||
*
|
|
||||||
* @param integer|array $requested_id
|
|
||||||
* @param string $shared Shared record detail
|
|
||||||
*/
|
|
||||||
public static function check_item_access($requested_id, $shared)
|
|
||||||
{
|
|
||||||
// Get all children folders
|
|
||||||
$foldersIds = Folder::with('folders:id,parent_id,id,name')
|
|
||||||
->where('user_id', $shared->user_id)
|
|
||||||
->where('parent_id', $shared->item_id)
|
|
||||||
->get();
|
|
||||||
|
|
||||||
// Get all authorized parent folders by shared folder as root of tree
|
|
||||||
$accessible_folder_ids = Arr::flatten([filter_folders_ids($foldersIds), $shared->item_id]);
|
|
||||||
|
|
||||||
// Check user access
|
|
||||||
if ( is_array($requested_id) ) {
|
|
||||||
foreach ($requested_id as $id) {
|
|
||||||
if (!in_array($id, $accessible_folder_ids))
|
|
||||||
abort(403);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! is_array($requested_id)) {
|
|
||||||
if (! in_array($requested_id, $accessible_folder_ids))
|
|
||||||
abort(403);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -27,42 +27,6 @@ use Symfony\Component\HttpKernel\Exception\HttpException;
|
|||||||
|
|
||||||
class FileManagerService
|
class FileManagerService
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Store folder icon
|
|
||||||
*
|
|
||||||
* @param $request
|
|
||||||
* @param $id
|
|
||||||
*/
|
|
||||||
public static function set_folder_icon($request, $id)
|
|
||||||
{
|
|
||||||
// Get folder
|
|
||||||
$folder = Folder::find($id);
|
|
||||||
|
|
||||||
// Set default folder icon
|
|
||||||
if ($request->emoji === 'default') {
|
|
||||||
$folder->update([
|
|
||||||
'emoji' => null,
|
|
||||||
'color' => null,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set emoji
|
|
||||||
if ($request->filled('emoji')) {
|
|
||||||
$folder->update([
|
|
||||||
'emoji' => $request->emoji,
|
|
||||||
'color' => null,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set color
|
|
||||||
if ($request->filled('color')) {
|
|
||||||
$folder->update([
|
|
||||||
'emoji' => null,
|
|
||||||
'color' => $request->color,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Zip requested folder
|
* Zip requested folder
|
||||||
*
|
*
|
||||||
@@ -480,6 +444,42 @@ class FileManagerService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store folder icon
|
||||||
|
*
|
||||||
|
* @param $request
|
||||||
|
* @param $id
|
||||||
|
*/
|
||||||
|
public static function set_folder_icon($request, $id)
|
||||||
|
{
|
||||||
|
// Get folder
|
||||||
|
$folder = Folder::find($id);
|
||||||
|
|
||||||
|
// Set default folder icon
|
||||||
|
if ($request->emoji === 'default') {
|
||||||
|
$folder->update([
|
||||||
|
'emoji' => null,
|
||||||
|
'color' => null,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set emoji
|
||||||
|
if ($request->filled('emoji')) {
|
||||||
|
$folder->update([
|
||||||
|
'emoji' => $request->emoji,
|
||||||
|
'color' => null,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set color
|
||||||
|
if ($request->filled('color')) {
|
||||||
|
$folder->update([
|
||||||
|
'emoji' => null,
|
||||||
|
'color' => $request->color,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Move file to external storage if is set
|
* Move file to external storage if is set
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -2,7 +2,9 @@
|
|||||||
|
|
||||||
namespace App\Services;
|
namespace App\Services;
|
||||||
|
|
||||||
|
use App\Models\Folder;
|
||||||
use DB;
|
use DB;
|
||||||
|
use Illuminate\Support\Arr;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
||||||
class HelperService
|
class HelperService
|
||||||
@@ -30,4 +32,35 @@ class HelperService
|
|||||||
->delete();
|
->delete();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check access to requested directory
|
||||||
|
*
|
||||||
|
* @param integer|array $requested_id
|
||||||
|
* @param string $shared Shared record detail
|
||||||
|
*/
|
||||||
|
public function check_item_access($requested_id, $shared)
|
||||||
|
{
|
||||||
|
// Get all children folders
|
||||||
|
$foldersIds = Folder::with('folders:id,parent_id,id,name')
|
||||||
|
->where('user_id', $shared->user_id)
|
||||||
|
->where('parent_id', $shared->item_id)
|
||||||
|
->get();
|
||||||
|
|
||||||
|
// Get all authorized parent folders by shared folder as root of tree
|
||||||
|
$accessible_folder_ids = Arr::flatten([filter_folders_ids($foldersIds), $shared->item_id]);
|
||||||
|
|
||||||
|
// Check user access
|
||||||
|
if ( is_array($requested_id) ) {
|
||||||
|
foreach ($requested_id as $id) {
|
||||||
|
if (!in_array($id, $accessible_folder_ids))
|
||||||
|
abort(403);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! is_array($requested_id)) {
|
||||||
|
if (! in_array($requested_id, $accessible_folder_ids))
|
||||||
|
abort(403);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user