mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-28 11:00:39 +00:00
- Restriction UI warning
- create folder restriction - fixed UI bugs
This commit is contained in:
@@ -15,8 +15,7 @@ class FixedBillingLimitationEngine implements LimitationEngine
|
||||
);
|
||||
|
||||
// Check if storage usage exceed predefined capacity
|
||||
return ! ($usedPercentage >= 100)
|
||||
;
|
||||
return ! ($usedPercentage >= 100);
|
||||
}
|
||||
|
||||
public function canDownload(User $user): bool
|
||||
|
||||
@@ -9,21 +9,18 @@ class MeteredBillingLimitationEngine implements LimitationEngine
|
||||
public function canUpload(User $user, int $fileSize = 0): bool
|
||||
{
|
||||
// Disable upload when user has more than 3 failed payments
|
||||
return ! ($user->failedPayments()->count() >= 3)
|
||||
;
|
||||
return ! ($user->failedPayments()->count() >= 3);
|
||||
}
|
||||
|
||||
public function canDownload(User $user): bool
|
||||
{
|
||||
// Disable upload when user has more than 3 failed payments
|
||||
return ! ($user->failedPayments()->count() >= 3)
|
||||
;
|
||||
// Disable download when user has more than 3 failed payments
|
||||
return ! ($user->failedPayments()->count() >= 3);
|
||||
}
|
||||
|
||||
public function canCreateFolder(User $user): bool
|
||||
{
|
||||
// Disable upload when user has more than 3 failed payments
|
||||
return ! ($user->failedPayments()->count() >= 3)
|
||||
;
|
||||
// Disable create folder when user has more than 3 failed payments
|
||||
return ! ($user->failedPayments()->count() >= 3);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
namespace App\Users\Exceptions;
|
||||
|
||||
use Exception;
|
||||
|
||||
class InvalidUserActionException extends Exception
|
||||
{
|
||||
// TODO: translate
|
||||
protected $message = 'This user action is not allowed.';
|
||||
}
|
||||
@@ -88,17 +88,6 @@ class User extends Authenticatable implements MustVerifyEmail
|
||||
return UserFactory::new();
|
||||
}
|
||||
|
||||
public function __call($method, $parameters)
|
||||
{
|
||||
if (str_starts_with($method, 'can')) {
|
||||
return resolve(LimitationManager::class)
|
||||
->driver()
|
||||
->$method($this, ...$parameters);
|
||||
}
|
||||
|
||||
return parent::__call($method, $parameters);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user used storage details
|
||||
*/
|
||||
@@ -211,6 +200,17 @@ class User extends Authenticatable implements MustVerifyEmail
|
||||
$this->notify(new ResetPassword($token));
|
||||
}
|
||||
|
||||
public function __call($method, $parameters)
|
||||
{
|
||||
if (str_starts_with($method, 'can')) {
|
||||
return resolve(LimitationManager::class)
|
||||
->driver()
|
||||
->$method($this, ...$parameters);
|
||||
}
|
||||
|
||||
return parent::__call($method, $parameters);
|
||||
}
|
||||
|
||||
protected static function boot()
|
||||
{
|
||||
parent::boot();
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
namespace Domain\Files\Actions;
|
||||
|
||||
use App\Users\Exceptions\InvalidUserActionException;
|
||||
use Illuminate\Support\Str;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
@@ -21,6 +22,8 @@ class UploadFileAction
|
||||
|
||||
/**
|
||||
* Upload new file
|
||||
*
|
||||
* @throws InvalidUserActionException
|
||||
*/
|
||||
public function __invoke(
|
||||
UploadRequest $request,
|
||||
@@ -68,7 +71,7 @@ class UploadFileAction
|
||||
if (! $user->canUpload($fileSize)) {
|
||||
Storage::disk('local')->delete("chunks/$chunkName");
|
||||
|
||||
abort(423, 'You exceed your storage limit!');
|
||||
throw new InvalidUserActionException();
|
||||
}
|
||||
|
||||
// Move finished file from chunk to file-manager directory
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
namespace Domain\Files\Controllers;
|
||||
|
||||
use App\Users\Exceptions\InvalidUserActionException;
|
||||
use Domain\Files\Models\File;
|
||||
use Illuminate\Http\Response;
|
||||
use App\Http\Controllers\Controller;
|
||||
@@ -27,8 +28,15 @@ class UploadFileController extends Controller
|
||||
return ($this->fakeUploadFile)($request);
|
||||
}
|
||||
|
||||
$file = ($this->uploadFiles)($request);
|
||||
try {
|
||||
$file = ($this->uploadFiles)($request);
|
||||
|
||||
return response(new FileResource($file), 201);
|
||||
return response(new FileResource($file), 201);
|
||||
} catch (InvalidUserActionException $e) {
|
||||
return response([
|
||||
'type' => 'error',
|
||||
'message' => $e->getMessage(),
|
||||
], 401);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,24 +5,35 @@ use Domain\Sharing\Models\Share;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Domain\Folders\Requests\CreateFolderRequest;
|
||||
use App\Users\Exceptions\InvalidUserActionException;
|
||||
|
||||
class CreateFolderAction
|
||||
{
|
||||
/**
|
||||
* Create new folder
|
||||
*
|
||||
* @throws InvalidUserActionException
|
||||
*/
|
||||
public function __invoke(
|
||||
CreateFolderRequest $request,
|
||||
?Share $shared = null,
|
||||
): Folder|array {
|
||||
// Get user model
|
||||
$user = $shared
|
||||
? $shared->user
|
||||
: Auth::user();
|
||||
|
||||
// Check if user can create folder
|
||||
if (! $user->canCreateFolder()) {
|
||||
throw new InvalidUserActionException();
|
||||
}
|
||||
|
||||
/*
|
||||
* check if exist parent team folder, if yes,
|
||||
* then get folder to detect whether it is team_folder
|
||||
* Check if exist parent team folder, if yes,
|
||||
* then get the latest parent folder to detect whether it is team_folder
|
||||
*/
|
||||
if ($request->has('parent_id')) {
|
||||
$isTeamFolder = Folder::find(
|
||||
$request->input('parent_id')
|
||||
)
|
||||
$isTeamFolder = Folder::find($request->input('parent_id'))
|
||||
->getLatestParent()
|
||||
->team_folder;
|
||||
}
|
||||
@@ -34,7 +45,7 @@ class CreateFolderAction
|
||||
'color' => $request->input('color') ?? null,
|
||||
'emoji' => $request->input('emoji') ?? null,
|
||||
'author' => $shared ? 'visitor' : 'user',
|
||||
'user_id' => $shared ? $shared->user_id : Auth::id(),
|
||||
'user_id' => $user->id,
|
||||
'team_folder' => $isTeamFolder ?? false,
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ use Domain\Folders\Resources\FolderResource;
|
||||
use Domain\Folders\Actions\CreateFolderAction;
|
||||
use Domain\Folders\Requests\CreateFolderRequest;
|
||||
use Support\Demo\Actions\FakeCreateFolderAction;
|
||||
use App\Users\Exceptions\InvalidUserActionException;
|
||||
|
||||
class CreateFolderController extends Controller
|
||||
{
|
||||
@@ -28,8 +29,17 @@ class CreateFolderController extends Controller
|
||||
return response(new FolderResource($fakeFolder), 201);
|
||||
}
|
||||
|
||||
$folder = ($this->createFolder)($request);
|
||||
try {
|
||||
// Create new folder
|
||||
$folder = ($this->createFolder)($request);
|
||||
|
||||
return response(new FolderResource($folder), 201);
|
||||
// Return new folder
|
||||
return response(new FolderResource($folder), 201);
|
||||
} catch (InvalidUserActionException $e) {
|
||||
return response([
|
||||
'type' => 'error',
|
||||
'message' => $e->getMessage(),
|
||||
], 401);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,9 +4,11 @@ namespace Domain\Folders\Controllers;
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Folders\Resources\FolderResource;
|
||||
use Domain\Folders\Actions\CreateFolderAction;
|
||||
use Domain\Folders\Requests\CreateFolderRequest;
|
||||
use Support\Demo\Actions\FakeCreateFolderAction;
|
||||
use App\Users\Exceptions\InvalidUserActionException;
|
||||
use Domain\Sharing\Actions\ProtectShareRecordAction;
|
||||
use Domain\Sharing\Actions\VerifyAccessToItemAction;
|
||||
|
||||
@@ -19,7 +21,7 @@ class VisitorCreateFolderController extends Controller
|
||||
private CreateFolderAction $createFolder,
|
||||
private ProtectShareRecordAction $protectShareRecord,
|
||||
private VerifyAccessToItemAction $verifyAccessToItem,
|
||||
private FakeCreateFolderAction $fakeCreateFolderAction,
|
||||
private FakeCreateFolderAction $fakeCreateFolder,
|
||||
) {
|
||||
}
|
||||
|
||||
@@ -28,7 +30,9 @@ class VisitorCreateFolderController extends Controller
|
||||
Share $shared,
|
||||
): Response | array {
|
||||
if (is_demo_account()) {
|
||||
return ($this->fakeCreateFolderAction)($request);
|
||||
$fakeFolder = ($this->fakeCreateFolder)($request);
|
||||
|
||||
return response(new FolderResource($fakeFolder), 201);
|
||||
}
|
||||
|
||||
// Check ability to access protected share record
|
||||
@@ -42,9 +46,18 @@ class VisitorCreateFolderController extends Controller
|
||||
// Check access to requested directory
|
||||
($this->verifyAccessToItem)($request->parent_id, $shared);
|
||||
|
||||
// Create folder
|
||||
$folder = ($this->createFolder)($request, $shared);
|
||||
try {
|
||||
// Create new folder
|
||||
$folder = ($this->createFolder)($request, $shared);
|
||||
|
||||
return response($folder, 201);
|
||||
// Return new folder
|
||||
return response(new FolderResource($folder), 201);
|
||||
} catch (InvalidUserActionException $e) {
|
||||
// Return error response
|
||||
return response([
|
||||
'type' => 'error',
|
||||
'message' => $e->getMessage(),
|
||||
], 401);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user