Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .github/workflows/run-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@ jobs:
fail-fast: true
matrix:
os: [ubuntu-latest, windows-latest]
php: [8.2, 8.1]
laravel: [10.*]
php: [8.2]
laravel: [11.*]
stability: [prefer-lowest, prefer-stable]
include:
- laravel: 10.*
testbench: 8.*
carbon: 2.*
- laravel: 11.*
testbench: 9.*
carbon: 3.*

name: P${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.stability }} - ${{ matrix.os }}

Expand Down
32 changes: 32 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,38 @@ public function panel(Panel $panel): Panel
}
```

### Security

Using the `canManageMails()` method, you can define which users have access to the mail resources/pages. Here's a comprehensive example that includes additional logic for flexibility:

```php
use Backstage\FilamentMails\FilamentMailsPlugin;
use Illuminate\Support\Facades\Auth;

$panel
->plugins([
FilamentMailsPlugin::make()
->canManageMails(function () {
$user = Auth::user();

// Allow access for users with specific roles
if ($user->hasRole('admin') || $user->hasRole('supervisor')) {
return true;
}

// Allow access for users with specific permissions
if ($user->hasPermissionTo('manage mails')) {
return true;
}

// Restrict access for all other users
return false;
}),
]);
```

This example demonstrates how to combine role-based and permission-based access control, providing a more robust and flexible approach to managing access to mail resources.

### Tenant middleware and route protection

If you want to protect the mail routes with your (tenant) middleware, you can do so by adding the routes to the `tenantRoutes`:
Expand Down
18 changes: 18 additions & 0 deletions src/FilamentMailsPlugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,18 @@
use Backstage\FilamentMails\Resources\EventResource;
use Backstage\FilamentMails\Resources\MailResource;
use Backstage\FilamentMails\Resources\SuppressionResource;
use Closure;
use Filament\Contracts\Plugin;
use Filament\Panel;
use Filament\Support\Colors\Color;
use Filament\Support\Concerns\EvaluatesClosures;

class FilamentMailsPlugin implements Plugin
{
use EvaluatesClosures;

public bool | Closure $canManageMails = true;

public function getId(): string
{
return 'filament-mails';
Expand Down Expand Up @@ -46,4 +52,16 @@ public static function get(): static

return $plugin;
}

public function canManageMails(bool | Closure $canManageMails = true): static
{
$this->canManageMails = $canManageMails;

return $this;
}

public function userCanManageMails(): bool
{
return $this->evaluate($this->canManageMails);
}
}
6 changes: 6 additions & 0 deletions src/Resources/EventResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Backstage\FilamentMails\Resources;

use Backstage\FilamentMails\FilamentMailsPlugin;
use Backstage\FilamentMails\Resources\EventResource\Pages\ListEvents;
use Backstage\FilamentMails\Resources\EventResource\Pages\ViewEvent;
use Backstage\Mails\Enums\EventType;
Expand All @@ -24,6 +25,11 @@ class EventResource extends Resource

protected static bool $shouldRegisterNavigation = true;

public static function canAccess(): bool
{
return FilamentMailsPlugin::get()->userCanManageMails();
}

public static function getSlug(?Panel $panel = null): string
{
return config('filament-mails.resources.mail')::getSlug() . '/events';
Expand Down
6 changes: 6 additions & 0 deletions src/Resources/EventResource/Pages/ListEvents.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Backstage\FilamentMails\Resources\EventResource\Pages;

use Backstage\FilamentMails\FilamentMailsPlugin;
use Backstage\FilamentMails\Resources\EventResource;
use Backstage\Mails\Enums\EventType;
use Backstage\Mails\Models\MailEvent;
Expand All @@ -11,6 +12,11 @@

class ListEvents extends ListRecords
{
public static function canAccess(array $parameters = []): bool
{
return FilamentMailsPlugin::get()->userCanManageMails();
}

public static function getResource(): string
{
return config('filament-mails.resources.event', EventResource::class);
Expand Down
6 changes: 6 additions & 0 deletions src/Resources/EventResource/Pages/ViewEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,17 @@

namespace Backstage\FilamentMails\Resources\EventResource\Pages;

use Backstage\FilamentMails\FilamentMailsPlugin;
use Backstage\FilamentMails\Resources\EventResource;
use Filament\Resources\Pages\ViewRecord;

class ViewEvent extends ViewRecord
{
public static function canAccess(array $parameters = []): bool
{
return FilamentMailsPlugin::get()->userCanManageMails();
}

public static function getResource(): string
{
return config('filament-mails.resources.event', EventResource::class);
Expand Down
6 changes: 6 additions & 0 deletions src/Resources/MailResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Backstage\FilamentMails\Resources;

use Backstage\FilamentMails\FilamentMailsPlugin;
use Backstage\FilamentMails\Resources\MailResource\Pages\ListMails;
use Backstage\FilamentMails\Resources\MailResource\Pages\ViewMail;
use Backstage\FilamentMails\Resources\MailResource\Widgets\MailStatsWidget;
Expand Down Expand Up @@ -45,6 +46,11 @@ class MailResource extends Resource

protected static bool $shouldRegisterNavigation = true;

public static function canAccess(): bool
{
return FilamentMailsPlugin::get()->userCanManageMails();
}

public static function getModel(): string
{
return config('mails.models.mail');
Expand Down
6 changes: 6 additions & 0 deletions src/Resources/MailResource/Pages/ListMails.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Backstage\FilamentMails\Resources\MailResource\Pages;

use Backstage\FilamentMails\FilamentMailsPlugin;
use Backstage\FilamentMails\Resources\MailResource;
use Backstage\FilamentMails\Resources\MailResource\Widgets\MailStatsWidget;
use Backstage\Mails\Models\Mail;
Expand All @@ -11,6 +12,11 @@

class ListMails extends ListRecords
{
public static function canAccess(array $parameters = []): bool
{
return FilamentMailsPlugin::get()->userCanManageMails();
}

public static function getResource(): string
{
return config('filament-mails.resources.mail', MailResource::class);
Expand Down
6 changes: 6 additions & 0 deletions src/Resources/MailResource/Pages/ViewMail.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,17 @@

namespace Backstage\FilamentMails\Resources\MailResource\Pages;

use Backstage\FilamentMails\FilamentMailsPlugin;
use Backstage\FilamentMails\Resources\MailResource;
use Filament\Resources\Pages\ViewRecord;

class ViewMail extends ViewRecord
{
public static function canAccess(array $parameters = []): bool
{
return FilamentMailsPlugin::get()->userCanManageMails();
}

public static function getResource(): string
{
return config('filament-mails.resources.mail', MailResource::class);
Expand Down
6 changes: 6 additions & 0 deletions src/Resources/MailResource/Widgets/MailStatsWidget.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Backstage\FilamentMails\Resources\MailResource\Widgets;

use Backstage\FilamentMails\FilamentMailsPlugin;
use Filament\Facades\Filament;
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
use Filament\Widgets\StatsOverviewWidget\Stat;
Expand All @@ -12,6 +13,11 @@ class MailStatsWidget extends BaseWidget

protected static bool $isDiscovered = false;

public static function canView(): bool
{
return FilamentMailsPlugin::get()->userCanManageMails();
}

protected function getStats(): array
{
$class = config('mails.models.mail');
Expand Down
6 changes: 6 additions & 0 deletions src/Resources/SuppressionResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Backstage\FilamentMails\Resources;

use Backstage\FilamentMails\FilamentMailsPlugin;
use Backstage\FilamentMails\Resources\SuppressionResource\Pages\ListSuppressions;
use Backstage\Mails\Enums\EventType;
use Backstage\Mails\Enums\Provider;
Expand All @@ -22,6 +23,11 @@ class SuppressionResource extends Resource

protected static bool $shouldRegisterNavigation = true;

public static function canAccess(): bool
{
return FilamentMailsPlugin::get()->userCanManageMails();
}

public static function getSlug(?Panel $panel = null): string
{
return config('filament-mails.resources.mail')::getSlug() . '/suppressions';
Expand Down
6 changes: 6 additions & 0 deletions src/Resources/SuppressionResource/Pages/ListSuppressions.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Backstage\FilamentMails\Resources\SuppressionResource\Pages;

use Backstage\FilamentMails\FilamentMailsPlugin;
use Backstage\FilamentMails\Resources\SuppressionResource;
use Filament\Resources\Pages\ListRecords;

Expand All @@ -13,4 +14,9 @@ public function getTitle(): string
{
return __('Suppressions');
}

public static function canAccess(array $parameters = []): bool
{
return FilamentMailsPlugin::get()->userCanManageMails();
}
}
Loading