Added invitation delete endpoint

This commit is contained in:
Constantin Graf
2024-04-18 21:42:52 +02:00
committed by Constantin Graf
parent ad6146c483
commit a149db655c
7 changed files with 120 additions and 0 deletions

View File

@@ -9,12 +9,21 @@ use App\Http\Requests\V1\Invitation\InvitationStoreRequest;
use App\Http\Resources\V1\Invitation\InvitationCollection;
use App\Http\Resources\V1\Invitation\InvitationResource;
use App\Models\Organization;
use App\Models\OrganizationInvitation;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Http\JsonResponse;
use Laravel\Jetstream\Contracts\InvitesTeamMembers;
class InvitationController extends Controller
{
protected function checkPermission(Organization $organization, string $permission, ?OrganizationInvitation $organizationInvitation = null): void
{
parent::checkPermission($organization, $permission);
if ($organizationInvitation !== null && $organizationInvitation->organization_id !== $organization->id) {
throw new AuthorizationException('Invitation does not belong to organization');
}
}
/**
* List all invitations of an organization
*
@@ -54,4 +63,20 @@ class InvitationController extends Controller
return response()->json(null, 204);
}
/**
* Remove a pending invitation
*
* @throws AuthorizationException
*
* @operationId removeInvitation
*/
public function destroy(Organization $organization, OrganizationInvitation $invitation): JsonResponse
{
$this->checkPermission($organization, 'invitations:remove', $invitation);
$invitation->delete();
return response()->json(null, 204);
}
}

View File

@@ -4,7 +4,9 @@ declare(strict_types=1);
namespace App\Models;
use Database\Factories\OrganizationInvitationFactory;
use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Laravel\Jetstream\Jetstream;
use Laravel\Jetstream\TeamInvitation as JetstreamTeamInvitation;
@@ -15,9 +17,12 @@ use Laravel\Jetstream\TeamInvitation as JetstreamTeamInvitation;
* @property string $role
* @property string $organization_id
* @property-read Organization $organization
*
* @method static OrganizationInvitationFactory factory()
*/
class OrganizationInvitation extends JetstreamTeamInvitation
{
use HasFactory;
use HasUuids;
/**

View File

@@ -86,5 +86,6 @@ class AppServiceProvider extends ServiceProvider
});
Route::model('member', Membership::class);
Route::model('invitation', OrganizationInvitation::class);
}
}

View File

@@ -93,6 +93,9 @@ class JetstreamServiceProvider extends ServiceProvider
'organizations:view',
'organizations:update',
'import',
'invitations:view',
'invitations:create',
'invitations:remove',
'members:view',
'members:invite-placeholder',
'members:change-role',