has($organization, 'members:change-role')) { throw new AuthorizationException(); } $user = User::where('id', '=', $userId)->firstOrFail(); $member = Membership::whereBelongsTo($user)->whereBelongsTo($organization)->firstOrFail(); if ($member->role === Role::Placeholder->value) { abort(403, 'Cannot update the role of a placeholder member.'); } Validator::make([ 'role' => $role, ], [ 'role' => [ 'required', 'string', Rule::in([ Role::Owner->value, Role::Admin->value, Role::Manager->value, Role::Employee->value, ]), ], ])->validate(); DB::transaction(function () use ($organization, $userId, $role, $user) { $organization->users()->updateExistingPivot($userId, [ 'role' => $role, ]); if ($role === Role::Owner->value) { app(UserService::class)->changeOwnership($organization, $user); } }); TeamMemberUpdated::dispatch($organization->fresh(), User::findOrFail($userId)); } }