Separated laravel app to its own folder (#540)

This commit is contained in:
Julien Nahum
2024-08-26 18:24:56 +02:00
committed by GitHub
parent 39b8df5eed
commit 5bd1dda504
546 changed files with 124 additions and 143 deletions

View File

@@ -0,0 +1,82 @@
<?php
namespace App\Policies;
use App\Models\Forms\Form;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class FormPolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can view any models.
*
* @return mixed
*/
public function viewAny(User $user)
{
return true;
}
/**
* Determine whether the user can view the model.
*
* @return mixed
*/
public function view(User $user, Form $form)
{
return $user->ownsForm($form);
}
/**
* Determine whether the user can create models.
*
* @return mixed
*/
public function create(User $user)
{
return true;
}
/**
* Determine whether the user can update the model.
*
* @return mixed
*/
public function update(User $user, Form $form)
{
return $user->ownsForm($form);
}
/**
* Determine whether the user can delete the model.
*
* @return mixed
*/
public function delete(User $user, Form $form)
{
return $user->ownsForm($form);
}
/**
* Determine whether the user can restore the model.
*
* @return mixed
*/
public function restore(User $user, Form $form)
{
return $user->ownsForm($form);
}
/**
* Determine whether the user can permanently delete the model.
*
* @return mixed
*/
public function forceDelete(User $user, Form $form)
{
return $user->ownsForm($form);
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace App\Policies\Integration;
use App\Models\Integration\FormZapierWebhook;
use App\Models\User;
use App\Policies\FormPolicy;
use Illuminate\Auth\Access\HandlesAuthorization;
class FormZapierWebhookPolicy
{
use HandlesAuthorization;
protected FormPolicy $formPolicy;
public function __construct()
{
$this->formPolicy = new FormPolicy();
}
public function store(User $user, FormZapierWebhook $webhook)
{
return ($webhook?->form) ? $this->formPolicy->update($user, $webhook->form) : false; // && $user->is_subscribed;
}
public function delete(User $user, FormZapierWebhook $webhook)
{
return ($webhook?->form) ? $this->formPolicy->update($user, $webhook->form) : false; // && $user->is_subscribed;
}
}

View File

@@ -0,0 +1,87 @@
<?php
namespace App\Policies;
use App\Models\Integration\FormIntegration;
use App\Models\OAuthProvider;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class OAuthProviderPolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can view any models.
*
* @return mixed
*/
public function viewAny(User $user)
{
return true;
}
/**
* Determine whether the user can view the model.
*
* @return mixed
*/
public function view(User $user, OAuthProvider $provider)
{
return $provider->user()->is($user);
}
/**
* Determine whether the user can create models.
*
* @return mixed
*/
public function create(User $user)
{
return true;
}
/**
* Determine whether the user can update the model.
*
* @return mixed
*/
public function update(User $user, OAuthProvider $provider)
{
return $provider->user()->is($user);
}
/**
* Determine whether the user can delete the model.
*
* @return mixed
*/
public function delete(User $user, OAuthProvider $provider)
{
$integrations = FormIntegration::where('oauth_id', $provider->id)->get();
if ($integrations->count() > 0) {
return $this->denyWithStatus(400, 'This connection cannot be removed because there is already an integration using it.');
}
return $provider->user()->is($user);
}
/**
* Determine whether the user can restore the model.
*
* @return mixed
*/
public function restore(User $user, OAuthProvider $provider)
{
return $provider->user()->is($user);
}
/**
* Determine whether the user can permanently delete the model.
*
* @return mixed
*/
public function forceDelete(User $user, OAuthProvider $provider)
{
return $provider->user()->is($user);
}
}

View File

@@ -0,0 +1,14 @@
<?php
namespace App\Policies;
use App\Models\User;
use Laravel\Sanctum\PersonalAccessToken;
class PersonalAccessTokenPolicy
{
public function delete(User $user, PersonalAccessToken $token)
{
return $token->tokenable()->is($user);
}
}

View File

@@ -0,0 +1,42 @@
<?php
namespace App\Policies;
use App\Models\Template;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class TemplatePolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can create models.
*
* @return \Illuminate\Auth\Access\Response|bool
*/
public function create(User $user)
{
return $user !== null;
}
/**
* Determine whether the user can update the model.
*
* @return mixed
*/
public function update(User $user, Template $template)
{
return $user->admin || $user->template_editor || $template->creator_id === $user->id;
}
/**
* Determine whether the user can delete the model.
*
* @return mixed
*/
public function delete(User $user, Template $template)
{
return $user->admin || $user->template_editor || $template->creator_id === $user->id;
}
}

View File

@@ -0,0 +1,125 @@
<?php
namespace App\Policies;
use App\Models\User;
use App\Models\Workspace;
use App\Models\UserWorkspace;
use App\Service\UserHelper;
use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Auth\Access\Response;
class WorkspacePolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can view any models.
*
* @return mixed
*/
public function viewAny(User $user)
{
return true;
}
/**
* Determine whether the user can view the model.
*
* @return mixed
*/
public function view(User $user, Workspace $workspace)
{
return $user->ownsWorkspace($workspace);
}
/**
* Determine whether the user can create models.
*
* @return mixed
*/
public function create(User $user)
{
return false;
}
/**
* Determine whether the user can update the model.
*
* @return mixed
*/
public function update(User $user, Workspace $workspace)
{
return false;
}
/**
* Determine whether the user can delete the model.
*
* @return mixed
*/
public function delete(User $user, Workspace $workspace)
{
return !$workspace->owners->where('id', $user->id)->isEmpty() && $user->workspaces()->count() > 1;
}
/**
* Determine whether the user can restore the model.
*
* @return mixed
*/
public function restore(User $user, Workspace $workspace)
{
return false;
}
/**
* Determine whether the user can permanently delete the model.
*
* @return mixed
*/
public function forceDelete(User $user, Workspace $workspace)
{
return false;
}
public function inviteUser(User $user, Workspace $workspace)
{
if (!$this->adminAction($user, $workspace)) {
return Response::deny('You need to be an admin of this workspace to do this.');
}
// If self-hosted, allow
if (!pricing_enabled()) {
return Response::allow();
}
if (!$workspace->is_pro) {
return Response::deny('You need a Pro subscription to invite a user.');
}
// In case of special license, check license limit
$billingOwner = $workspace->billingOwners()->first();
if ($license = $billingOwner->activeLicense()) {
$userActiveMembers = (new UserHelper($billingOwner))->getActiveMembersCount();
if ($userActiveMembers >= $license->max_users_limit_count) {
return Response::deny('You have reached the maximum number of users allowed with your license.');
}
}
return true;
}
/**
* Determine whether the user is an admin in the workspace.
*
* @return mixed
*/
public function adminAction(User $user, Workspace $workspace)
{
$userWorkspace = UserWorkspace::where('user_id', $user->id)
->where('workspace_id', $workspace->id)
->first();
return $userWorkspace && $userWorkspace->role === 'admin';
}
}