Renamed jetstream team to organization

This commit is contained in:
Constantin Graf
2024-01-21 19:52:19 +01:00
parent 6377df1f44
commit 0a8d958ccc
63 changed files with 461 additions and 329 deletions

View File

@@ -4,7 +4,7 @@ declare(strict_types=1);
namespace App\Actions\Fortify;
use App\Models\Team;
use App\Models\Organization;
use App\Models\User;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
@@ -46,9 +46,9 @@ class CreateNewUser implements CreatesNewUsers
*/
protected function createTeam(User $user): void
{
$user->ownedTeams()->save(Team::forceCreate([
$user->ownedTeams()->save(Organization::forceCreate([
'user_id' => $user->id,
'name' => explode(' ', $user->name, 2)[0]."'s Team",
'name' => explode(' ', $user->name, 2)[0]."'s Organization",
'personal_team' => true,
]));
}

View File

@@ -4,7 +4,7 @@ declare(strict_types=1);
namespace App\Actions\Jetstream;
use App\Models\Team;
use App\Models\Organization;
use App\Models\User;
use Closure;
use Illuminate\Support\Facades\Gate;
@@ -15,32 +15,32 @@ use Laravel\Jetstream\Events\TeamMemberAdded;
use Laravel\Jetstream\Jetstream;
use Laravel\Jetstream\Rules\Role;
class AddTeamMember implements AddsTeamMembers
class AddOrganizationMember implements AddsTeamMembers
{
/**
* Add a new team member to the given team.
*/
public function add(User $user, Team $team, string $email, ?string $role = null): void
public function add(User $user, Organization $organization, string $email, ?string $role = null): void
{
Gate::forUser($user)->authorize('addTeamMember', $team);
Gate::forUser($user)->authorize('addTeamMember', $organization);
$this->validate($team, $email, $role);
$this->validate($organization, $email, $role);
$newTeamMember = Jetstream::findUserByEmailOrFail($email);
AddingTeamMember::dispatch($team, $newTeamMember);
AddingTeamMember::dispatch($organization, $newTeamMember);
$team->users()->attach(
$organization->users()->attach(
$newTeamMember, ['role' => $role]
);
TeamMemberAdded::dispatch($team, $newTeamMember);
TeamMemberAdded::dispatch($organization, $newTeamMember);
}
/**
* Validate the add member operation.
*/
protected function validate(Team $team, string $email, ?string $role): void
protected function validate(Organization $organization, string $email, ?string $role): void
{
Validator::make([
'email' => $email,
@@ -48,7 +48,7 @@ class AddTeamMember implements AddsTeamMembers
], $this->rules(), [
'email.exists' => __('We were unable to find a registered user with this email address.'),
])->after(
$this->ensureUserIsNotAlreadyOnTeam($team, $email)
$this->ensureUserIsNotAlreadyOnTeam($organization, $email)
)->validateWithBag('addTeamMember');
}
@@ -70,7 +70,7 @@ class AddTeamMember implements AddsTeamMembers
/**
* Ensure that the user is not already on the team.
*/
protected function ensureUserIsNotAlreadyOnTeam(Team $team, string $email): Closure
protected function ensureUserIsNotAlreadyOnTeam(Organization $team, string $email): Closure
{
return function ($validator) use ($team, $email) {
$validator->errors()->addIf(

View File

@@ -4,22 +4,27 @@ declare(strict_types=1);
namespace App\Actions\Jetstream;
use App\Models\Team;
use App\Models\Organization;
use App\Models\User;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
use Laravel\Jetstream\Contracts\CreatesTeams;
use Laravel\Jetstream\Events\AddingTeam;
use Laravel\Jetstream\Jetstream;
class CreateTeam implements CreatesTeams
class CreateOrganization implements CreatesTeams
{
/**
* Validate and create a new team for the given user.
*
* @param array<string, string> $input
*
* @throws AuthorizationException
* @throws ValidationException
*/
public function create(User $user, array $input): Team
public function create(User $user, array $input): Organization
{
Gate::forUser($user)->authorize('create', Jetstream::newTeamModel());
@@ -29,11 +34,14 @@ class CreateTeam implements CreatesTeams
AddingTeam::dispatch($user);
$user->switchTeam($team = $user->ownedTeams()->create([
/** @var Organization $organization */
$organization = $user->ownedTeams()->create([
'name' => $input['name'],
'personal_team' => false,
]));
]);
return $team;
$user->switchTeam($organization);
return $organization;
}
}

View File

@@ -4,15 +4,15 @@ declare(strict_types=1);
namespace App\Actions\Jetstream;
use App\Models\Team;
use App\Models\Organization;
use Laravel\Jetstream\Contracts\DeletesTeams;
class DeleteTeam implements DeletesTeams
class DeleteOrganization implements DeletesTeams
{
/**
* Delete the given team.
*/
public function delete(Team $team): void
public function delete(Organization $team): void
{
$team->purge();
}

View File

@@ -4,7 +4,7 @@ declare(strict_types=1);
namespace App\Actions\Jetstream;
use App\Models\Team;
use App\Models\Organization;
use App\Models\User;
use Illuminate\Support\Facades\DB;
use Laravel\Jetstream\Contracts\DeletesTeams;
@@ -47,7 +47,7 @@ class DeleteUser implements DeletesUsers
{
$user->teams()->detach();
$user->ownedTeams->each(function (Team $team) {
$user->ownedTeams->each(function (Organization $team) {
$this->deletesTeams->delete($team);
});
}

View File

@@ -0,0 +1,94 @@
<?php
declare(strict_types=1);
namespace App\Actions\Jetstream;
use App\Models\Organization;
use App\Models\OrganizationInvitation;
use App\Models\User;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Validator;
use Korridor\LaravelModelValidationRules\Rules\UniqueEloquent;
use Laravel\Jetstream\Contracts\InvitesTeamMembers;
use Laravel\Jetstream\Events\InvitingTeamMember;
use Laravel\Jetstream\Jetstream;
use Laravel\Jetstream\Mail\TeamInvitation;
use Laravel\Jetstream\Rules\Role;
class InviteOrganizationMember implements InvitesTeamMembers
{
/**
* Invite a new team member to the given team.
*/
public function invite(User $user, Organization $organization, string $email, ?string $role = null): void
{
Gate::forUser($user)->authorize('addTeamMember', $organization);
$this->validate($organization, $email, $role);
InvitingTeamMember::dispatch($organization, $email, $role);
$invitation = $organization->teamInvitations()->create([
'email' => $email,
'role' => $role,
]);
Mail::to($email)->send(new TeamInvitation($invitation));
}
/**
* Validate the invite member operation.
*/
protected function validate(Organization $organization, string $email, ?string $role): void
{
Validator::make([
'email' => $email,
'role' => $role,
], $this->rules($organization), [
'email.unique' => __('This user has already been invited to the team.'),
])->after(
$this->ensureUserIsNotAlreadyOnTeam($organization, $email)
)->validateWithBag('addTeamMember');
}
/**
* Get the validation rules for inviting a team member.
*
* @return array<string, ValidationRule|array|string>
*/
protected function rules(Organization $organization): array
{
return array_filter([
'email' => [
'required',
'email',
new UniqueEloquent(OrganizationInvitation::class, 'email', function (Builder $builder) use ($organization) {
/** @var Builder<OrganizationInvitation> $builder */
return $builder->whereBelongsTo($organization, 'organization');
}),
],
'role' => Jetstream::hasRoles()
? ['required', 'string', new Role]
: null,
]);
}
/**
* Ensure that the user is not already on the team.
*/
protected function ensureUserIsNotAlreadyOnTeam(Organization $organization, string $email): Closure
{
return function ($validator) use ($organization, $email) {
$validator->errors()->addIf(
$organization->hasUserWithEmail($email),
'email',
__('This user already belongs to the team.')
);
};
}
}

View File

@@ -1,90 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Actions\Jetstream;
use App\Models\Team;
use App\Models\User;
use Closure;
use Illuminate\Database\Query\Builder;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Laravel\Jetstream\Contracts\InvitesTeamMembers;
use Laravel\Jetstream\Events\InvitingTeamMember;
use Laravel\Jetstream\Jetstream;
use Laravel\Jetstream\Mail\TeamInvitation;
use Laravel\Jetstream\Rules\Role;
class InviteTeamMember implements InvitesTeamMembers
{
/**
* Invite a new team member to the given team.
*/
public function invite(User $user, Team $team, string $email, ?string $role = null): void
{
Gate::forUser($user)->authorize('addTeamMember', $team);
$this->validate($team, $email, $role);
InvitingTeamMember::dispatch($team, $email, $role);
$invitation = $team->teamInvitations()->create([
'email' => $email,
'role' => $role,
]);
Mail::to($email)->send(new TeamInvitation($invitation));
}
/**
* Validate the invite member operation.
*/
protected function validate(Team $team, string $email, ?string $role): void
{
Validator::make([
'email' => $email,
'role' => $role,
], $this->rules($team), [
'email.unique' => __('This user has already been invited to the team.'),
])->after(
$this->ensureUserIsNotAlreadyOnTeam($team, $email)
)->validateWithBag('addTeamMember');
}
/**
* Get the validation rules for inviting a team member.
*
* @return array<string, \Illuminate\Contracts\Validation\Rule|array|string>
*/
protected function rules(Team $team): array
{
return array_filter([
'email' => [
'required', 'email',
Rule::unique('team_invitations')->where(function (Builder $query) use ($team) {
$query->where('team_id', $team->id);
}),
],
'role' => Jetstream::hasRoles()
? ['required', 'string', new Role]
: null,
]);
}
/**
* Ensure that the user is not already on the team.
*/
protected function ensureUserIsNotAlreadyOnTeam(Team $team, string $email): Closure
{
return function ($validator) use ($team, $email) {
$validator->errors()->addIf(
$team->hasUserWithEmail($email),
'email',
__('This user already belongs to the team.')
);
};
}
}

View File

@@ -4,7 +4,7 @@ declare(strict_types=1);
namespace App\Actions\Jetstream;
use App\Models\Team;
use App\Models\Organization;
use App\Models\User;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Support\Facades\Gate;
@@ -12,28 +12,28 @@ use Illuminate\Validation\ValidationException;
use Laravel\Jetstream\Contracts\RemovesTeamMembers;
use Laravel\Jetstream\Events\TeamMemberRemoved;
class RemoveTeamMember implements RemovesTeamMembers
class RemoveOrganizationMember implements RemovesTeamMembers
{
/**
* Remove the team member from the given team.
*/
public function remove(User $user, Team $team, User $teamMember): void
public function remove(User $user, Organization $organization, User $teamMember): void
{
$this->authorize($user, $team, $teamMember);
$this->authorize($user, $organization, $teamMember);
$this->ensureUserDoesNotOwnTeam($teamMember, $team);
$this->ensureUserDoesNotOwnTeam($teamMember, $organization);
$team->removeUser($teamMember);
$organization->removeUser($teamMember);
TeamMemberRemoved::dispatch($team, $teamMember);
TeamMemberRemoved::dispatch($organization, $teamMember);
}
/**
* Authorize that the user can remove the team member.
*/
protected function authorize(User $user, Team $team, User $teamMember): void
protected function authorize(User $user, Organization $organization, User $teamMember): void
{
if (! Gate::forUser($user)->check('removeTeamMember', $team) &&
if (! Gate::forUser($user)->check('removeTeamMember', $organization) &&
$user->id !== $teamMember->id) {
throw new AuthorizationException;
}
@@ -42,9 +42,9 @@ class RemoveTeamMember implements RemovesTeamMembers
/**
* Ensure that the currently authenticated user does not own the team.
*/
protected function ensureUserDoesNotOwnTeam(User $teamMember, Team $team): void
protected function ensureUserDoesNotOwnTeam(User $teamMember, Organization $organization): void
{
if ($teamMember->id === $team->owner->id) {
if ($teamMember->id === $organization->owner->id) {
throw ValidationException::withMessages([
'team' => [__('You may not leave a team that you created.')],
])->errorBag('removeTeamMember');

View File

@@ -4,28 +4,33 @@ declare(strict_types=1);
namespace App\Actions\Jetstream;
use App\Models\Team;
use App\Models\Organization;
use App\Models\User;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
use Laravel\Jetstream\Contracts\UpdatesTeamNames;
class UpdateTeamName implements UpdatesTeamNames
class UpdateOrganization implements UpdatesTeamNames
{
/**
* Validate and update the given team's name.
*
* @param array<string, string> $input
*
* @throws AuthorizationException
* @throws ValidationException
*/
public function update(User $user, Team $team, array $input): void
public function update(User $user, Organization $organization, array $input): void
{
Gate::forUser($user)->authorize('update', $team);
Gate::forUser($user)->authorize('update', $organization);
Validator::make($input, [
'name' => ['required', 'string', 'max:255'],
])->validateWithBag('updateTeamName');
$team->forceFill([
$organization->forceFill([
'name' => $input['name'],
])->save();
}

View File

@@ -14,7 +14,9 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
* @property string $id
* @property string $name
* @property string $organization_id
* @property-read Team $organization
* @property string $created_at
* @property string $updated_at
* @property-read Organization $organization
*
* @method static ClientFactory factory()
*/
@@ -33,10 +35,10 @@ class Client extends Model
];
/**
* @return BelongsTo<Team, Client>
* @return BelongsTo<Organization, Client>
*/
public function organization(): BelongsTo
{
return $this->belongsTo(Team::class, 'organization_id');
return $this->belongsTo(Organization::class, 'organization_id');
}
}

View File

@@ -7,14 +7,24 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Laravel\Jetstream\Membership as JetstreamMembership;
/**
* @property string $id
* @property string $role
* @property string $organization_id
* @property string $user_id
* @property string $created_at
* @property string $updated_at
* @property-read Organization $organization
* @property-read User $user
*/
class Membership extends JetstreamMembership
{
use HasUuids;
/**
* Indicates if the IDs are auto-incrementing.
* The table associated with the pivot model.
*
* @var bool
* @var string
*/
public $incrementing = true;
protected $table = 'organization_user';
}

View File

@@ -4,7 +4,7 @@ declare(strict_types=1);
namespace App\Models;
use Database\Factories\TeamFactory;
use Database\Factories\OrganizationFactory;
use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\HasMany;
@@ -17,10 +17,10 @@ use Laravel\Jetstream\Team as JetstreamTeam;
* @property string $id
* @property User $owner
*
* @method HasMany<TeamInvitation> teamInvitations()
* @method static TeamFactory factory()
* @method HasMany<OrganizationInvitation> teamInvitations()
* @method static OrganizationFactory factory()
*/
class Team extends JetstreamTeam
class Organization extends JetstreamTeam
{
use HasFactory;
use HasUuids;

View File

@@ -0,0 +1,52 @@
<?php
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Laravel\Jetstream\Jetstream;
use Laravel\Jetstream\TeamInvitation as JetstreamTeamInvitation;
/**
* @property string $id
* @property string $email
*/
class OrganizationInvitation extends JetstreamTeamInvitation
{
use HasUuids;
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'organization_invitations';
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'email',
'role',
];
/**
* Get the organization that the invitation belongs to.
*/
public function organization(): BelongsTo
{
return $this->belongsTo(Jetstream::teamModel(), 'organization_id');
}
/**
* Get the organization that the invitation belongs to.
*/
public function team(): BelongsTo
{
return $this->belongsTo(Jetstream::teamModel(), 'organization_id');
}
}

View File

@@ -17,7 +17,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
* @property string $name
* @property string $organization_id
* @property string $client_id
* @property-read Team $organization
* @property-read Organization $organization
* @property-read Client|null $client
* @property-read Collection<Task> $tasks
*
@@ -38,11 +38,11 @@ class Project extends Model
];
/**
* @return BelongsTo<Team, Project>
* @return BelongsTo<Organization, Project>
*/
public function organization(): BelongsTo
{
return $this->belongsTo(Team::class, 'organization_id');
return $this->belongsTo(Organization::class, 'organization_id');
}
/**

View File

@@ -14,7 +14,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
* @property string $id
* @property string $name
* @property string $organization_id
* @property-read Team $organization
* @property-read Organization $organization
*
* @method static TagFactory factory()
*/
@@ -33,10 +33,10 @@ class Tag extends Model
];
/**
* @return BelongsTo<Team, Tag>
* @return BelongsTo<Organization, Tag>
*/
public function organization(): BelongsTo
{
return $this->belongsTo(Team::class, 'organization_id');
return $this->belongsTo(Organization::class, 'organization_id');
}
}

View File

@@ -16,7 +16,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
* @property string $project_id
* @property string $organization_id
* @property-read Project $project
* @property-read Team $organization
* @property-read Organization $organization
*
* @method static TaskFactory factory()
*/
@@ -43,10 +43,10 @@ class Task extends Model
}
/**
* @return BelongsTo<Team, Task>
* @return BelongsTo<Organization, Task>
*/
public function organization(): BelongsTo
{
return $this->belongsTo(Team::class, 'organization_id');
return $this->belongsTo(Organization::class, 'organization_id');
}
}

View File

@@ -1,33 +0,0 @@
<?php
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Laravel\Jetstream\Jetstream;
use Laravel\Jetstream\TeamInvitation as JetstreamTeamInvitation;
class TeamInvitation extends JetstreamTeamInvitation
{
use HasUuids;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'email',
'role',
];
/**
* Get the team that the invitation belongs to.
*/
public function team(): BelongsTo
{
return $this->belongsTo(Jetstream::teamModel());
}
}

View File

@@ -19,7 +19,7 @@ use Illuminate\Support\Carbon;
* @property bool $billable
* @property array $tags
* @property-read User $user
* @property-read Team $organization
* @property-read Organization $organization
* @property-read Project|null $project
* @property-read Task|null $task
*
@@ -52,11 +52,11 @@ class TimeEntry extends Model
}
/**
* @return BelongsTo<Team, TimeEntry>
* @return BelongsTo<Organization, TimeEntry>
*/
public function organization(): BelongsTo
{
return $this->belongsTo(Team::class, 'organization_id');
return $this->belongsTo(Organization::class, 'organization_id');
}
/**

View File

@@ -8,6 +8,7 @@ use Database\Factories\UserFactory;
use Filament\Panel;
use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
@@ -20,7 +21,7 @@ use Laravel\Passport\HasApiTokens;
* @property string $id
* @property string $name
*
* @method HasMany<Team> ownedTeams()
* @method HasMany<Organization> ownedTeams()
* @method static UserFactory factory()
*/
class User extends Authenticatable
@@ -79,4 +80,17 @@ class User extends Authenticatable
// TODO: Implement canAccessPanel() method.
return false;
}
/**
* @return BelongsToMany<Organization>
*/
public function organizations(): BelongsToMany
{
return $this->belongsToMany(Organization::class, Membership::class)
->withPivot([
'role',
])
->withTimestamps()
->as('membership');
}
}

View File

@@ -4,11 +4,11 @@ declare(strict_types=1);
namespace App\Policies;
use App\Models\Team;
use App\Models\Organization;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class TeamPolicy
class OrganizationPolicy
{
use HandlesAuthorization;
@@ -23,9 +23,9 @@ class TeamPolicy
/**
* Determine whether the user can view the model.
*/
public function view(User $user, Team $team): bool
public function view(User $user, Organization $organization): bool
{
return $user->belongsToTeam($team);
return $user->belongsToTeam($organization);
}
/**
@@ -39,40 +39,40 @@ class TeamPolicy
/**
* Determine whether the user can update the model.
*/
public function update(User $user, Team $team): bool
public function update(User $user, Organization $organization): bool
{
return $user->ownsTeam($team);
return $user->ownsTeam($organization);
}
/**
* Determine whether the user can add team members.
*/
public function addTeamMember(User $user, Team $team): bool
public function addTeamMember(User $user, Organization $organization): bool
{
return $user->ownsTeam($team);
return $user->ownsTeam($organization);
}
/**
* Determine whether the user can update team member permissions.
*/
public function updateTeamMember(User $user, Team $team): bool
public function updateTeamMember(User $user, Organization $organization): bool
{
return $user->ownsTeam($team);
return $user->ownsTeam($organization);
}
/**
* Determine whether the user can remove team members.
*/
public function removeTeamMember(User $user, Team $team): bool
public function removeTeamMember(User $user, Organization $organization): bool
{
return $user->ownsTeam($team);
return $user->ownsTeam($organization);
}
/**
* Determine whether the user can delete the model.
*/
public function delete(User $user, Team $team): bool
public function delete(User $user, Organization $organization): bool
{
return $user->ownsTeam($team);
return $user->ownsTeam($organization);
}
}

View File

@@ -5,8 +5,8 @@ declare(strict_types=1);
namespace App\Providers;
use App\Models\Membership;
use App\Models\Team;
use App\Models\TeamInvitation;
use App\Models\Organization;
use App\Models\OrganizationInvitation;
use App\Models\User;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\Relation;
@@ -31,8 +31,8 @@ class AppServiceProvider extends ServiceProvider
Model::preventSilentlyDiscardingAttributes(! $this->app->isProduction());
Relation::enforceMorphMap([
'membership' => Membership::class,
'team' => Team::class,
'team_invitation' => TeamInvitation::class,
'team' => Organization::class,
'team_invitation' => OrganizationInvitation::class,
'user' => User::class,
]);
}

View File

@@ -4,7 +4,8 @@ declare(strict_types=1);
namespace App\Providers;
// use Illuminate\Support\Facades\Gate;
use App\Models\Organization;
use App\Policies\OrganizationPolicy;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Laravel\Jetstream\Jetstream;
use Laravel\Passport\Passport;
@@ -17,7 +18,7 @@ class AuthServiceProvider extends ServiceProvider
* @var array<class-string, class-string>
*/
protected $policies = [
//
Organization::class => OrganizationPolicy::class,
];
/**

View File

@@ -4,13 +4,15 @@ declare(strict_types=1);
namespace App\Providers;
use App\Actions\Jetstream\AddTeamMember;
use App\Actions\Jetstream\CreateTeam;
use App\Actions\Jetstream\DeleteTeam;
use App\Actions\Jetstream\AddOrganizationMember;
use App\Actions\Jetstream\CreateOrganization;
use App\Actions\Jetstream\DeleteOrganization;
use App\Actions\Jetstream\DeleteUser;
use App\Actions\Jetstream\InviteTeamMember;
use App\Actions\Jetstream\RemoveTeamMember;
use App\Actions\Jetstream\UpdateTeamName;
use App\Actions\Jetstream\InviteOrganizationMember;
use App\Actions\Jetstream\RemoveOrganizationMember;
use App\Actions\Jetstream\UpdateOrganization;
use App\Models\Organization;
use App\Models\OrganizationInvitation;
use Illuminate\Support\ServiceProvider;
use Laravel\Jetstream\Jetstream;
@@ -31,13 +33,15 @@ class JetstreamServiceProvider extends ServiceProvider
{
$this->configurePermissions();
Jetstream::createTeamsUsing(CreateTeam::class);
Jetstream::updateTeamNamesUsing(UpdateTeamName::class);
Jetstream::addTeamMembersUsing(AddTeamMember::class);
Jetstream::inviteTeamMembersUsing(InviteTeamMember::class);
Jetstream::removeTeamMembersUsing(RemoveTeamMember::class);
Jetstream::deleteTeamsUsing(DeleteTeam::class);
Jetstream::createTeamsUsing(CreateOrganization::class);
Jetstream::updateTeamNamesUsing(UpdateOrganization::class);
Jetstream::addTeamMembersUsing(AddOrganizationMember::class);
Jetstream::inviteTeamMembersUsing(InviteOrganizationMember::class);
Jetstream::removeTeamMembersUsing(RemoveOrganizationMember::class);
Jetstream::deleteTeamsUsing(DeleteOrganization::class);
Jetstream::deleteUsersUsing(DeleteUser::class);
Jetstream::useTeamModel(Organization::class);
Jetstream::useTeamInvitationModel(OrganizationInvitation::class);
}
/**