<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
mortalkiller / filament-complete-user-profile example snippets
'storage' => 'separate',
use Mortalkiller\FilamentCompleteUserProfile\CompleteUserProfilePlugin;
public function panel(Panel $panel): Panel
{
return $panel
->plugins([
CompleteUserProfilePlugin::make(),
]);
}
use Mortalkiller\FilamentCompleteUserProfile\Concerns\InteractsWithMultiFactorAuthentication;
use Mortalkiller\FilamentCompleteUserProfile\Contracts\HasMultiFactorAuthentication;
class User extends Authenticatable implements HasMultiFactorAuthentication
{
use InteractsWithMultiFactorAuthentication;
}
use Filament\Auth\MultiFactor\Email\Contracts\HasEmailAuthentication;
use Illuminate\Notifications\Notifiable;
use Mortalkiller\FilamentCompleteUserProfile\Concerns\InteractsWithEmailAuthentication;
class User extends Authenticatable implements HasEmailAuthentication
{
use InteractsWithEmailAuthentication;
use Notifiable;
}
CompleteUserProfilePlugin::make()
->sessions();
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens;
}
namespace App\Support\Tenancy;
use Illuminate\Database\Eloquent\Model;
use Mortalkiller\FilamentCompleteUserProfile\Contracts\TenancyResolver;
final class StanclTenancyResolver implements TenancyResolver
{
public function resolve(): ?Model
{
$tenant = tenant();
return $tenant instanceof Model ? $tenant : null;
}
}
use App\Support\Tenancy\StanclTenancyResolver;
use Mortalkiller\FilamentCompleteUserProfile\CompleteUserProfilePlugin;
use Mortalkiller\FilamentCompleteUserProfile\Features\ApiTokens;
CompleteUserProfilePlugin::make()
->tenancyResolver(StanclTenancyResolver::class)
->apiTokens(fn (ApiTokens $tokens): ApiTokens => $tokens
->tenantScoped()
->abilities([
'customers:read' => 'Read customers',
]));
use Mortalkiller\FilamentCompleteUserProfile\Http\Middleware\EnsureTokenContext;
Route::middleware([
'auth:sanctum',
EnsureTokenContext::class,
])->group(function (): void {
// Tenant-sensitive API routes...
});
use Filament\Schemas\Components\Livewire;
AccountSection::make('addresses')
->schema([
Livewire::make(\App\Livewire\Account\AddressesTable::class),
]);
use Filament\Pages\Page;
use Mortalkiller\FilamentCompleteUserProfile\Concerns\InteractsWithAccountSection;
class Billing extends Page
{
use InteractsWithAccountSection;
protected static ?string $slug = 'profile/billing';
// Define your page content, actions and authorization as usual.
}
CompleteUserProfilePlugin::make()
->section(
AccountSection::make('billing')
->label('Billing')
->description('Manage your subscription and payment details.')
->sort(60)
->page(Billing::class),
);