-
Notifications
You must be signed in to change notification settings - Fork 18
Add option for a custom model callback #46
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -103,6 +103,27 @@ FilamentDeveloperLoginsPlugin::make() | |||||
->modelClass(Admin::class) | ||||||
``` | ||||||
|
||||||
### Override query | ||||||
|
||||||
Default the plugin will retrieve the user by searching the provided model using the specified column. If you want to implement your own logic to retrieve the user, you can use the `modelCallback()` method. | ||||||
This method accepts a closure and provides the plugin and should return an instance of `Illuminate\Database\Eloquent\Builder`. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
||||||
Example: | ||||||
|
||||||
```php | ||||||
use DutchCodingCompany\FilamentDeveloperLogins\FilamentDeveloperLoginsPlugin; | ||||||
use Illuminate\Database\Eloquent\Builder;; | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
||||||
FilamentDeveloperLoginsPlugin::make() | ||||||
->modelCallback( | ||||||
fn (FilamentDeveloperLoginsPlugin $plugin, string $credentials): Builder | ||||||
=> (new $plugin->getModelClass()) | ||||||
->where($plugin->getColumn(), $credentials) | ||||||
// Above is the default behavior. For example if you are using a global scope you can remove it here. | ||||||
->withoutGlobalScopes() | ||||||
) | ||||||
``` | ||||||
|
||||||
### redirectTo() | ||||||
|
||||||
By default, the user will be redirected using the `Filament::getUrl()` method, which directs them to the dashboard. In the case of multi-tenancy, the user will also be redirected to the correct tenant. If you prefer to use a different url, you can utilize the redirectTo() method. | ||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -10,6 +10,7 @@ | |
use Filament\Panel; | ||
use Filament\Schemas\Concerns\HasColumns; | ||
use Filament\Support\Concerns\EvaluatesClosures; | ||
use Illuminate\Database\Eloquent\Builder; | ||
|
||
class FilamentDeveloperLoginsPlugin implements Plugin | ||
{ | ||
|
@@ -22,6 +23,8 @@ class FilamentDeveloperLoginsPlugin implements Plugin | |
|
||
public Closure | bool $enabled = false; | ||
|
||
public ?Closure $modelCallback = null; | ||
|
||
public Closure | bool $switchable = true; | ||
|
||
/** | ||
|
@@ -96,6 +99,28 @@ public function getEnabled(): bool | |
return $this->evaluate($this->enabled); | ||
} | ||
|
||
public function modelCallback(Closure $callback): static | ||
{ | ||
$this->modelCallback = $callback; | ||
|
||
return $this; | ||
} | ||
|
||
/** | ||
* @param FilamentDeveloperLoginsPlugin $plugin | ||
* @param string $credentials | ||
* @return Builder<\Illuminate\Database\Eloquent\Model&\Illuminate\Contracts\Auth\Authenticatable> | ||
*/ | ||
public function getModelCallback(self $plugin, string $credentials): Builder | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This doesn't get the model callback, but the user query builder (via the model callback) |
||
{ | ||
return $this->evaluate( | ||
value: $this->modelCallback | ||
?? static fn (): Builder => (new ($plugin->getModelClass())) | ||
->where($plugin->getColumn(), $credentials), | ||
Comment on lines
+117
to
+119
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
namedInjections: ['plugin' => $plugin, 'credentials' => $credentials], | ||
); | ||
} | ||
|
||
public function switchable(Closure | bool $value): static | ||
{ | ||
$this->switchable = $value; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.