- Refactoring

- Download restriction
This commit is contained in:
Čarodej
2022-01-05 18:29:07 +01:00
parent ec29764c3f
commit 29a954e21b
15 changed files with 400 additions and 176 deletions
-30
View File
@@ -1,30 +0,0 @@
<?php
namespace App\Limitations;
use Illuminate\Support\Manager;
use App\Limitations\Engines\DefaultLimitationEngine;
use App\Limitations\Engines\FixedBillingLimitationEngine;
use App\Limitations\Engines\MeteredBillingLimitationEngine;
class LimitationManager extends Manager
{
public function getDefaultDriver(): string
{
return get_limitation_driver();
}
public function createDefaultDriver(): DefaultLimitationEngine
{
return new DefaultLimitationEngine();
}
public function createFixedDriver(): FixedBillingLimitationEngine
{
return new FixedBillingLimitationEngine();
}
public function createMeteredDriver(): MeteredBillingLimitationEngine
{
return new MeteredBillingLimitationEngine();
}
}
@@ -1,11 +1,11 @@
<?php
namespace App\Limitations\Engines;
namespace App\Restrictions\Engines;
use App\Users\Models\User;
use App\Limitations\LimitationEngine;
use App\Restrictions\RestrictionsEngine;
use Domain\Teams\Actions\CheckMaxTeamMembersLimitAction;
class DefaultLimitationEngine implements LimitationEngine
class DefaultRestrictionsEngine implements RestrictionsEngine
{
public function canUpload(User $user, int $fileSize = 0): bool
{
@@ -1,11 +1,11 @@
<?php
namespace App\Limitations\Engines;
namespace App\Restrictions\Engines;
use App\Users\Models\User;
use App\Limitations\LimitationEngine;
use App\Restrictions\RestrictionsEngine;
use Domain\Teams\Actions\CheckMaxTeamMembersLimitAction;
class FixedBillingLimitationEngine implements LimitationEngine
class FixedBillingRestrictionsEngine implements RestrictionsEngine
{
public function canUpload(User $user, int $fileSize = 0): bool
{
@@ -1,10 +1,10 @@
<?php
namespace App\Limitations\Engines;
namespace App\Restrictions\Engines;
use App\Users\Models\User;
use App\Limitations\LimitationEngine;
use App\Restrictions\RestrictionsEngine;
class MeteredBillingLimitationEngine implements LimitationEngine
class MeteredBillingRestrictionsEngine implements RestrictionsEngine
{
public function canUpload(User $user, int $fileSize = 0): bool
{
@@ -1,9 +1,9 @@
<?php
namespace App\Limitations;
namespace App\Restrictions;
use App\Users\Models\User;
interface LimitationEngine
interface RestrictionsEngine
{
public function canUpload(User $user, int $fileSize = 0): bool;
@@ -0,0 +1,30 @@
<?php
namespace App\Restrictions;
use Illuminate\Support\Manager;
use App\Restrictions\Engines\DefaultRestrictionsEngine;
use App\Restrictions\Engines\FixedBillingRestrictionsEngine;
use App\Restrictions\Engines\MeteredBillingRestrictionsEngine;
class RestrictionsManager extends Manager
{
public function getDefaultDriver(): string
{
return get_restriction_driver();
}
public function createDefaultDriver(): DefaultRestrictionsEngine
{
return new DefaultRestrictionsEngine();
}
public function createFixedDriver(): FixedBillingRestrictionsEngine
{
return new FixedBillingRestrictionsEngine();
}
public function createMeteredDriver(): MeteredBillingRestrictionsEngine
{
return new MeteredBillingRestrictionsEngine();
}
}
+2 -2
View File
@@ -12,9 +12,9 @@ use Illuminate\Support\Facades\DB;
use Database\Factories\UserFactory;
use Domain\Settings\Models\Setting;
use Kyslik\ColumnSortable\Sortable;
use App\Limitations\LimitationManager;
use Illuminate\Support\Facades\Storage;
use Illuminate\Notifications\Notifiable;
use App\Restrictions\RestrictionsManager;
use App\Users\Notifications\ResetPassword;
use Laravel\Fortify\TwoFactorAuthenticatable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
@@ -203,7 +203,7 @@ class User extends Authenticatable implements MustVerifyEmail
public function __call($method, $parameters)
{
if (str_starts_with($method, 'can')) {
return resolve(LimitationManager::class)
return resolve(RestrictionsManager::class)
->driver()
->$method($this, ...$parameters);
}
@@ -2,6 +2,7 @@
namespace Domain\Files\Controllers\FileAccess;
use Gate;
use Illuminate\Http\Response;
use App\Http\Controllers\Controller;
use Domain\Files\Models\File as UserFile;
use Domain\Files\Actions\DownloadFileAction;
@@ -18,11 +19,19 @@ class GetFileController extends Controller
public function __invoke(
string $filename,
): BinaryFileResponse {
): Response|BinaryFileResponse {
$file = UserFile::withTrashed()
->where('basename', $filename)
->firstOrFail();
// Check if user can download file
if (! $file->owner->canDownload()) {
return response([
'type' => 'error',
'message' => 'This user action is not allowed.',
], 401);
}
if (! Gate::any(['can-edit', 'can-view'], [$file, null])) {
abort(403, 'Access Denied');
}
@@ -2,6 +2,7 @@
namespace Domain\Files\Controllers\FileAccess;
use Domain\Files\Models\File;
use Illuminate\Http\Response;
use Domain\Sharing\Models\Share;
use App\Http\Controllers\Controller;
use Domain\Files\Actions\DownloadFileAction;
@@ -26,7 +27,15 @@ class VisitorGetFileController extends Controller
public function __invoke(
$filename,
Share $shared,
): BinaryFileResponse {
): BinaryFileResponse|Response {
// Check if user can download file
if (! $shared->user->canDownload()) {
return response([
'type' => 'error',
'message' => 'This user action is not allowed.',
], 401);
}
// Check ability to access protected share files
($this->protectShareRecord)($shared);
+2 -2
View File
@@ -33,11 +33,11 @@ if (! function_exists('obfuscate_email')) {
}
}
if (! function_exists('get_limitation_driver')) {
if (! function_exists('get_restriction_driver')) {
/**
* Get driver for limitation API
*/
function get_limitation_driver(): string
function get_restriction_driver(): string
{
return match (get_settings('subscription_type')) {
'fixed' => 'fixed',