Skip to content

Commit 1275e3f

Browse files
authored
Add config option to bypass setting User on Events. (rappasoft#2006)
Co-authored-by: julianmedwards <[email protected]>
1 parent e3c79b4 commit 1275e3f

File tree

7 files changed

+89
-1
lines changed

7 files changed

+89
-1
lines changed

config/livewire-tables.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,4 +114,14 @@
114114
'defaultConfig' => [],
115115
],
116116

117+
/**
118+
* Configuration options for Events
119+
*/
120+
'events' => [
121+
/**
122+
* Enable or disable passing the user from Laravel's Auth service to events
123+
*/
124+
'enableUserForEvent' => true,
125+
],
126+
117127
];

docs/datatable/events.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ There are several events, all in the Rappasoft\LaravelLivewireTables\Events name
5555
| FilterApplied | Applied when a Filter is applied (not when removed) | The Table Name ($tableName), Filter Key ($key), Filter Value ($value), Logged In User ($user) |
5656
| SearchApplied | Applied when a Search is applied (not when removed) | The Table Name ($tableName), Search Term ($value), Logged In User ($user) |
5757

58+
Passing the user with an event is optional and [can be disabled in the config](../start/configuration.md#bypassing-laravels-auth-service).
59+
5860
By default, the Tables will dispatch an event when the Selected Columns is changed, you may customise this behaviour:
5961

6062
#### enableAllEvents

docs/start/configuration.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,22 @@ You must also make sure you have this Alpine style available globally. Note that
8181
[x-cloak] { display: none !important; }
8282
</style>
8383
```
84+
85+
## Bypassing Laravel's Auth Service
86+
87+
By default, all [events](../datatable/events#dispatched) will retrieve any currently authenticated user from Laravel's [Auth service](https://laravel.com/docs/authentication) and pass it along with the event.
88+
89+
If your project doesn't include the Illuminate/Auth package, or you otherwise want to prevent this, you can set the `enableUserForEvent` config option to false.
90+
91+
```php
92+
// config/livewire-tables.php
93+
return [
94+
// ...
95+
'events' => [
96+
/**
97+
* Enable or disable passing the user from Laravel's Auth service to events
98+
*/
99+
'enableUserForEvent' => false,
100+
],
101+
];
102+
```

src/Events/LaravelLivewireTablesEvent.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public function setTableForEvent(string $tableName): self
4242

4343
public function setUserForEvent(): self
4444
{
45-
if (auth()->user()) {
45+
if (config('livewire-tables.events.enableUserForEvent', true) && auth()->user()) {
4646
$this->user = auth()->user();
4747
}
4848

tests/Events/ColumnsSelectedTest.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,23 @@ public function test_an_event_is_emitted_when_a_column_selection_are_updated_and
8080
return $event->columns == [] && $event->user->id == '1234' && $event->tableName == $this->basicTable->getTableName();
8181
});
8282
}
83+
84+
public function test_user_not_set_on_event_when_a_column_selection_is_updated_and_user_for_event_disabled()
85+
{
86+
Event::fake();
87+
88+
config()->set('livewire-tables.events.enableUserForEvent', false);
89+
90+
$user = new \Illuminate\Foundation\Auth\User;
91+
$user->id = '1234';
92+
$user->name = 'Bob';
93+
$this->actingAs($user);
94+
95+
$this->basicTable->selectAllColumns();
96+
97+
Event::assertDispatched(ColumnsSelected::class, function ($event) {
98+
$this->assertFalse(isset($event->user), "User set on Event when config is set to disable this behavior");
99+
return true;
100+
});
101+
}
83102
}

tests/Events/FilterAppliedTest.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,23 @@ public function test_an_event_is_emitted_when_a_filter_is_applied_with_values_an
6161
return $event->value == 'test value' && $event->user->id == '1234' && $event->key = 'pet_name_filter' && $event->tableName == $this->basicTable->getTableName();
6262
});
6363
}
64+
65+
public function test_user_not_set_on_event_when_a_filter_is_applied_and_user_for_event_disabled()
66+
{
67+
Event::fake();
68+
69+
config()->set('livewire-tables.events.enableUserForEvent', false);
70+
71+
$user = new \Illuminate\Foundation\Auth\User;
72+
$user->id = '1234';
73+
$user->name = 'Bob';
74+
$this->actingAs($user);
75+
76+
$this->basicTable->enableFilterAppliedEvent()->setFilter('pet_name_filter', 'test value');
77+
78+
Event::assertDispatched(FilterApplied::class, function ($event) {
79+
$this->assertFalse(isset($event->user), "User set on Event when config is set to disable this behavior");
80+
return true;
81+
});
82+
}
6483
}

tests/Events/SearchAppliedTest.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,4 +71,23 @@ public function test_an_event_is_emitted_when_a_search_is_applied_and_event_enab
7171
return $event->value == 'test search value' && $event->user->id == '1234' && $event->tableName == $this->basicTable->getTableName();
7272
});
7373
}
74+
75+
public function test_user_not_set_on_event_when_a_search_is_applied_and_user_for_event_disabled()
76+
{
77+
Event::fake();
78+
79+
config()->set('livewire-tables.events.enableUserForEvent', false);
80+
81+
$user = new \Illuminate\Foundation\Auth\User;
82+
$user->id = '1234';
83+
$user->name = 'Bob';
84+
$this->actingAs($user);
85+
86+
$this->basicTable->enableSearchAppliedEvent()->setSearch('test')->applySearch();
87+
88+
Event::assertDispatched(SearchApplied::class, function ($event) {
89+
$this->assertFalse(isset($event->user), "User set on Event when config is set to disable this behavior");
90+
return true;
91+
});
92+
}
7493
}

0 commit comments

Comments
 (0)