- Frontend restriction shared page

This commit is contained in:
Čarodej
2022-01-06 11:05:49 +01:00
parent 05f6023053
commit 8d53ed1531
17 changed files with 188 additions and 36 deletions
@@ -43,4 +43,9 @@ class DefaultRestrictionsEngine implements RestrictionsEngine
{
return resolve(CheckMaxTeamMembersLimitAction::class)($user, $newInvites);
}
public function canVisitShared(User $user): bool
{
return true;
}
}
@@ -38,4 +38,9 @@ class FixedBillingRestrictionsEngine implements RestrictionsEngine
{
return resolve(CheckMaxTeamMembersLimitAction::class)($user, $newInvites);
}
public function canVisitShared(User $user): bool
{
return true;
}
}
@@ -34,4 +34,10 @@ class MeteredBillingRestrictionsEngine implements RestrictionsEngine
{
return true;
}
public function canVisitShared(User $user): bool
{
// Disable share visit when user has more than 3 failed payments
return ! ($user->failedPayments()->count() >= 3);
}
}
@@ -14,4 +14,6 @@ interface RestrictionsEngine
public function canCreateTeamFolder(User $user): bool;
public function canInviteTeamMembers(User $user, array $newInvites = []): bool;
public function canVisitShared(User $user): bool;
}
@@ -2,6 +2,7 @@
namespace Domain\Browsing\Controllers;
use Domain\Files\Models\File;
use Domain\Folders\Resources\FolderResource;
use Domain\Sharing\Models\Share;
use Domain\Folders\Models\Folder;
use Domain\Files\Resources\FilesCollection;
@@ -30,6 +31,7 @@ class VisitorBrowseFolderController
// Check if user can get directory
($this->verifyAccessToItem)($id, $shared);
// Get requested folder
$requestedFolder = Folder::findOrFail($id);
// Get files and folders
@@ -49,7 +51,7 @@ class VisitorBrowseFolderController
return [
'folders' => new FolderCollection($folders),
'files' => new FilesCollection($files),
'root' => $requestedFolder,
'root' => new FolderResource($requestedFolder),
];
}
}
@@ -1,6 +1,7 @@
<?php
namespace Domain\Sharing\Controllers;
use Illuminate\Http\RedirectResponse;
use Illuminate\View\View;
use Domain\Files\Models\File;
use Domain\Sharing\Models\Share;
@@ -16,12 +17,16 @@ class SharePublicIndexController extends Controller
*/
public function __construct(
public RecordDownloadAction $recordDownload,
) {
}
) {}
public function __invoke(
Share $share,
): View | StreamedResponse {
): View | StreamedResponse | RedirectResponse {
// Check if user can see shared record
if (! $share->user->canVisitShared()) {
return redirect('/temporary-unavailable');
}
// Delete share_session if exist
if ($share->is_protected) {
cookie()->queue('share_session', '', -1);
@@ -1,7 +1,9 @@
<?php
namespace Domain\Sharing\Controllers;
use Illuminate\View\View;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Contracts\View\View;
use Domain\Sharing\Models\Share;
use App\Http\Controllers\Controller;
@@ -12,7 +14,8 @@ class WebCrawlerOpenGraphController extends Controller
*/
public function __invoke(
Share $share
): View {
): Application|Factory|View
{
$namespace = match ($share->type) {
'folder' => 'Domain\\Folders\\Models\\Folder',
'file' => 'Domain\\Files\\Models\\File',