File tree Expand file tree Collapse file tree
SuppressionResource/Pages Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -13,13 +13,13 @@ jobs:
1313 fail-fast : true
1414 matrix :
1515 os : [ubuntu-latest, windows-latest]
16- php : [8.2, 8.1 ]
17- laravel : [10 .*]
16+ php : [8.2]
17+ laravel : [11 .*]
1818 stability : [prefer-lowest, prefer-stable]
1919 include :
20- - laravel : 10 .*
21- testbench : 8 .*
22- carbon : 2 .*
20+ - laravel : 11 .*
21+ testbench : 9 .*
22+ carbon : 3 .*
2323
2424 name : P${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.stability }} - ${{ matrix.os }}
2525
Original file line number Diff line number Diff line change @@ -85,6 +85,38 @@ public function panel(Panel $panel): Panel
8585}
8686```
8787
88+ ### Security
89+
90+ 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:
91+
92+ ``` php
93+ use Backstage\FilamentMails\FilamentMailsPlugin;
94+ use Illuminate\Support\Facades\Auth;
95+
96+ $panel
97+ ->plugins([
98+ FilamentMailsPlugin::make()
99+ ->canManageMails(function () {
100+ $user = Auth::user();
101+
102+ // Allow access for users with specific roles
103+ if ($user->hasRole('admin') || $user->hasRole('supervisor')) {
104+ return true;
105+ }
106+
107+ // Allow access for users with specific permissions
108+ if ($user->hasPermissionTo('manage mails')) {
109+ return true;
110+ }
111+
112+ // Restrict access for all other users
113+ return false;
114+ }),
115+ ]);
116+ ```
117+
118+ 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.
119+
88120### Tenant middleware and route protection
89121
90122If you want to protect the mail routes with your (tenant) middleware, you can do so by adding the routes to the ` tenantRoutes ` :
Original file line number Diff line number Diff line change 55use Backstage \FilamentMails \Resources \EventResource ;
66use Backstage \FilamentMails \Resources \MailResource ;
77use Backstage \FilamentMails \Resources \SuppressionResource ;
8+ use Closure ;
89use Filament \Contracts \Plugin ;
910use Filament \Panel ;
1011use Filament \Support \Colors \Color ;
12+ use Filament \Support \Concerns \EvaluatesClosures ;
1113
1214class FilamentMailsPlugin implements Plugin
1315{
16+ use EvaluatesClosures;
17+
18+ public bool | Closure $ canManageMails = true ;
19+
1420 public function getId (): string
1521 {
1622 return 'filament-mails ' ;
@@ -46,4 +52,16 @@ public static function get(): static
4652
4753 return $ plugin ;
4854 }
55+
56+ public function canManageMails (bool | Closure $ canManageMails = true ): static
57+ {
58+ $ this ->canManageMails = $ canManageMails ;
59+
60+ return $ this ;
61+ }
62+
63+ public function userCanManageMails (): bool
64+ {
65+ return $ this ->evaluate ($ this ->canManageMails );
66+ }
4967}
Original file line number Diff line number Diff line change 22
33namespace Backstage \FilamentMails \Resources ;
44
5+ use Backstage \FilamentMails \FilamentMailsPlugin ;
56use Backstage \FilamentMails \Resources \EventResource \Pages \ListEvents ;
67use Backstage \FilamentMails \Resources \EventResource \Pages \ViewEvent ;
78use Backstage \Mails \Enums \EventType ;
@@ -24,6 +25,11 @@ class EventResource extends Resource
2425
2526 protected static bool $ shouldRegisterNavigation = true ;
2627
28+ public static function canAccess (): bool
29+ {
30+ return FilamentMailsPlugin::get ()->userCanManageMails ();
31+ }
32+
2733 public static function getSlug (?Panel $ panel = null ): string
2834 {
2935 return config ('filament-mails.resources.mail ' )::getSlug () . '/events ' ;
Original file line number Diff line number Diff line change 22
33namespace Backstage \FilamentMails \Resources \EventResource \Pages ;
44
5+ use Backstage \FilamentMails \FilamentMailsPlugin ;
56use Backstage \FilamentMails \Resources \EventResource ;
67use Backstage \Mails \Enums \EventType ;
78use Backstage \Mails \Models \MailEvent ;
1112
1213class ListEvents extends ListRecords
1314{
15+ public static function canAccess (array $ parameters = []): bool
16+ {
17+ return FilamentMailsPlugin::get ()->userCanManageMails ();
18+ }
19+
1420 public static function getResource (): string
1521 {
1622 return config ('filament-mails.resources.event ' , EventResource::class);
Original file line number Diff line number Diff line change 22
33namespace Backstage \FilamentMails \Resources \EventResource \Pages ;
44
5+ use Backstage \FilamentMails \FilamentMailsPlugin ;
56use Backstage \FilamentMails \Resources \EventResource ;
67use Filament \Resources \Pages \ViewRecord ;
78
89class ViewEvent extends ViewRecord
910{
11+ public static function canAccess (array $ parameters = []): bool
12+ {
13+ return FilamentMailsPlugin::get ()->userCanManageMails ();
14+ }
15+
1016 public static function getResource (): string
1117 {
1218 return config ('filament-mails.resources.event ' , EventResource::class);
Original file line number Diff line number Diff line change 22
33namespace Backstage \FilamentMails \Resources ;
44
5+ use Backstage \FilamentMails \FilamentMailsPlugin ;
56use Backstage \FilamentMails \Resources \MailResource \Pages \ListMails ;
67use Backstage \FilamentMails \Resources \MailResource \Pages \ViewMail ;
78use Backstage \FilamentMails \Resources \MailResource \Widgets \MailStatsWidget ;
@@ -45,6 +46,11 @@ class MailResource extends Resource
4546
4647 protected static bool $ shouldRegisterNavigation = true ;
4748
49+ public static function canAccess (): bool
50+ {
51+ return FilamentMailsPlugin::get ()->userCanManageMails ();
52+ }
53+
4854 public static function getModel (): string
4955 {
5056 return config ('mails.models.mail ' );
Original file line number Diff line number Diff line change 22
33namespace Backstage \FilamentMails \Resources \MailResource \Pages ;
44
5+ use Backstage \FilamentMails \FilamentMailsPlugin ;
56use Backstage \FilamentMails \Resources \MailResource ;
67use Backstage \FilamentMails \Resources \MailResource \Widgets \MailStatsWidget ;
78use Backstage \Mails \Models \Mail ;
1112
1213class ListMails extends ListRecords
1314{
15+ public static function canAccess (array $ parameters = []): bool
16+ {
17+ return FilamentMailsPlugin::get ()->userCanManageMails ();
18+ }
19+
1420 public static function getResource (): string
1521 {
1622 return config ('filament-mails.resources.mail ' , MailResource::class);
Original file line number Diff line number Diff line change 22
33namespace Backstage \FilamentMails \Resources \MailResource \Pages ;
44
5+ use Backstage \FilamentMails \FilamentMailsPlugin ;
56use Backstage \FilamentMails \Resources \MailResource ;
67use Filament \Resources \Pages \ViewRecord ;
78
89class ViewMail extends ViewRecord
910{
11+ public static function canAccess (array $ parameters = []): bool
12+ {
13+ return FilamentMailsPlugin::get ()->userCanManageMails ();
14+ }
15+
1016 public static function getResource (): string
1117 {
1218 return config ('filament-mails.resources.mail ' , MailResource::class);
Original file line number Diff line number Diff line change 22
33namespace Backstage \FilamentMails \Resources \MailResource \Widgets ;
44
5+ use Backstage \FilamentMails \FilamentMailsPlugin ;
56use Filament \Facades \Filament ;
67use Filament \Widgets \StatsOverviewWidget as BaseWidget ;
78use Filament \Widgets \StatsOverviewWidget \Stat ;
@@ -12,6 +13,11 @@ class MailStatsWidget extends BaseWidget
1213
1314 protected static bool $ isDiscovered = false ;
1415
16+ public static function canView (): bool
17+ {
18+ return FilamentMailsPlugin::get ()->userCanManageMails ();
19+ }
20+
1521 protected function getStats (): array
1622 {
1723 $ class = config ('mails.models.mail ' );
You can’t perform that action at this time.
0 commit comments