diff --git a/app/Enums/TeamMemberRole.php b/app/Enums/TeamMemberRole.php index 905cda8..5ced803 100644 --- a/app/Enums/TeamMemberRole.php +++ b/app/Enums/TeamMemberRole.php @@ -4,6 +4,7 @@ namespace App\Enums; enum TeamMemberRole: string { + case Owner = 'owner'; case Admin = 'admin'; case Member = 'member'; diff --git a/app/Http/Controllers/TeamController.php b/app/Http/Controllers/TeamController.php index 47e98a3..8eacfd7 100644 --- a/app/Http/Controllers/TeamController.php +++ b/app/Http/Controllers/TeamController.php @@ -53,7 +53,7 @@ class TeamController extends Controller try { DB::transaction(function () use ($request): void { $team = Team::create($request->validated()); - $team->members()->attach($request->user(), ['role' => TeamMemberRole::Admin]); + $team->members()->attach($request->user(), ['role' => TeamMemberRole::Owner]); }); } catch (\Exception $exception) { report($exception); @@ -100,6 +100,17 @@ class TeamController extends Controller return to_route('teams.show', $team); } + public function destroy(Request $request, Team $team) + { + try { + $team->delete(); + } catch (\Exception $exception) { + report($exception); + Inertia::flash('error', 'Team could not be deleted.'); + } + + Inertia::flash('success', 'Team successfully deleted.'); + } public function nameToSlug(Request $request): JsonResponse { diff --git a/app/Policies/TeamPolicy.php b/app/Policies/TeamPolicy.php index c331fb5..0a6f867 100644 --- a/app/Policies/TeamPolicy.php +++ b/app/Policies/TeamPolicy.php @@ -28,6 +28,16 @@ class TeamPolicy return false; } - return $membership->pivot->role === TeamMemberRole::Admin; + return ($membership->pivot->role === TeamMemberRole::Admin) || ($membership->pivot->role === TeamMemberRole::Owner); + } + + public function delete(User $user, Team $team): bool + { + $membership = $team->members()->whereKey($user->id)->first(); + if (! $membership) { + return false; + } + + return $membership->pivot->role === TeamMemberRole::Owner; } } diff --git a/resources/js/pages/team/Index.vue b/resources/js/pages/team/Index.vue index 2d020ec..bf49f30 100644 --- a/resources/js/pages/team/Index.vue +++ b/resources/js/pages/team/Index.vue @@ -1,20 +1,12 @@