Skip to content

Commit f6a017c

Browse files
refactor: upgrade to f4
* feat: migrate to f4 * chore: fixes * chore: more fixes * chore: remove filament upgrade * chore: format * chore: update seeder * chore: fix attempt * Revert "chore: fix attempt" This reverts commit 6dd9633. * chore: fix seeder * chore: further fixes * chore: permissions f4 syntax & minor other fixes * chore: make panel nullable prop for tests * style: fix code style * chore: add custom permissions handling * chore: update test runner * chore: update comment * chore: test & shield fixes * style: fix code style * chore: trigger-rerun of tests * Revert "chore: trigger-rerun of tests" This reverts commit df6df1c. --------- Co-authored-by: Kilian Trunk <[email protected]> Co-authored-by: KilianTrunk <[email protected]>
1 parent 8bbabf3 commit f6a017c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+623
-549
lines changed

.github/workflows/test-runner.yml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
name: Tests
22

33
on:
4-
# Run testing on all push and pull requests for the main branch that have committed changes in PHP files
4+
# Run testing on all push and pull requests that have committed changes in PHP files
55
push:
6-
branches: [ "main" ]
76
paths:
8-
- '**.php'
7+
- '**/*.php'
98
pull_request:
10-
branches: [ "main" ]
119
paths:
12-
- '**.php'
10+
- '**/*.php'
1311
# Make it possible to run the workflow manually
1412
workflow_dispatch:
1513

composer.json

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,35 +42,33 @@
4242
},
4343
"require": {
4444
"php": "^8.3",
45-
"bezhansalleh/filament-language-switch": "^3.1",
46-
"bezhansalleh/filament-panel-switch": "^1.1",
47-
"bezhansalleh/filament-shield": "^3.3",
45+
"bezhansalleh/filament-language-switch": "^4.0",
46+
"bezhansalleh/filament-panel-switch": "^2.0",
47+
"bezhansalleh/filament-shield": "^4.0",
4848
"datalinx/php-utils": "^2.5",
49-
"dutchcodingcompany/filament-developer-logins": "^1.6",
49+
"dutchcodingcompany/filament-developer-logins": "^2.0",
5050
"eclipsephp/common": "dev-main",
5151
"eclipsephp/world-plugin": "dev-main",
52-
"filament/filament": "^3.3",
53-
"filament/spatie-laravel-media-library-plugin": "^3.2",
54-
"filament/spatie-laravel-translatable-plugin": "^3.2",
55-
"hasnayeen/themes": "^3.0",
52+
"filament/filament": "^4.0",
53+
"filament/spatie-laravel-media-library-plugin": "^4.0",
54+
"lara-zeus/spatie-translatable": "^1.0",
5655
"laravel/framework": "^12.0",
5756
"laravel/horizon": "^5.31",
5857
"laravel/telescope": "^5.5",
5958
"laravel/tinker": "^2.10",
59+
"nben/filament-record-nav": "^1.0",
6060
"opcodesio/log-viewer": "^3.17",
61-
"pxlrbt/filament-environment-indicator": "^2.1",
62-
"pxlrbt/filament-excel": "^2.4",
63-
"pxlrbt/filament-spotlight": "^1.3",
64-
"shuvroroy/filament-spatie-laravel-health": "^2.3",
61+
"pxlrbt/filament-environment-indicator": "^3.0",
62+
"pxlrbt/filament-excel": "^3.0",
63+
"pxlrbt/filament-spotlight": "^2.0",
64+
"shuvroroy/filament-spatie-laravel-health": "^3.0",
6565
"spatie/laravel-package-tools": "^1.18",
6666
"spatie/laravel-translatable": "^6.11",
6767
"spatie/security-advisories-health-check": "^1.2",
68-
"stechstudio/filament-impersonate": "^3.16",
68+
"stechstudio/filament-impersonate": "^4.0",
6969
"symfony/http-client": "^7.3",
7070
"symfony/mailgun-mailer": "^7.3",
71-
"tangodev-it/filament-emoji-picker": "^1.0",
72-
"typesense/typesense-php": "^5.0",
73-
"nben/filament-record-nav": "^1.0"
71+
"typesense/typesense-php": "^5.0"
7472
},
7573
"require-dev": {
7674
"laravel/pint": "^1.21",

config/filament-shield.php

Lines changed: 52 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,88 @@
11
<?php
22

3+
use Filament\Pages\Dashboard;
4+
use Filament\Widgets\AccountWidget;
5+
use Filament\Widgets\FilamentInfoWidget;
6+
37
return [
48
'shield_resource' => [
5-
'should_register_navigation' => true,
69
'slug' => 'shield/roles',
7-
'navigation_sort' => -1,
8-
'navigation_badge' => true,
9-
'navigation_group' => true,
10-
'is_globally_searchable' => false,
1110
'show_model_path' => true,
12-
'is_scoped_to_tenant' => false,
1311
'cluster' => null,
12+
'tabs' => [
13+
'pages' => true,
14+
'widgets' => true,
15+
'resources' => true,
16+
'custom_permissions' => true,
17+
],
1418
],
1519

1620
'tenant_model' => \Eclipse\Core\Models\Site::class,
1721

18-
'auth_provider_model' => [
19-
'fqcn' => \Eclipse\Core\Models\User::class,
20-
],
22+
'auth_provider_model' => \Eclipse\Core\Models\User::class,
2123

2224
'super_admin' => [
2325
'enabled' => true,
2426
'name' => 'super_admin',
2527
'define_via_gate' => false,
26-
'intercept_gate' => 'before', // after
28+
'intercept_gate' => 'before',
2729
],
2830

2931
'panel_user' => [
3032
'enabled' => true,
3133
'name' => 'panel_user',
3234
],
3335

34-
'permission_prefixes' => [
35-
'resource' => [
36-
'view_any',
37-
'view',
38-
'create',
39-
'update',
40-
'restore',
41-
'restore_any',
42-
'replicate',
43-
'reorder',
44-
'delete',
45-
'delete_any',
46-
'force_delete',
47-
'force_delete_any',
48-
],
49-
50-
'page' => 'page',
51-
'widget' => 'widget',
36+
'permissions' => [
37+
'separator' => '_',
38+
'case' => 'lower_snake',
39+
'generate' => true,
5240
],
5341

54-
'entities' => [
55-
'pages' => true,
56-
'widgets' => true,
57-
'resources' => true,
58-
'custom_permissions' => false,
42+
'policies' => [
43+
'path' => app_path('Policies'),
44+
'merge' => false,
45+
'generate' => true,
46+
'methods' => [
47+
'viewAny', 'view', 'create', 'update', 'restore', 'restoreAny',
48+
'replicate', 'reorder', 'delete', 'deleteAny', 'forceDelete', 'forceDeleteAny',
49+
],
50+
'single_parameter_methods' => [
51+
'viewAny', 'create', 'deleteAny', 'forceDeleteAny', 'restoreAny', 'reorder',
52+
],
5953
],
6054

61-
'generator' => [
62-
'option' => 'policies_and_permissions',
63-
'policy_directory' => 'Policies',
64-
'policy_namespace' => 'Policies',
55+
'localization' => [
56+
'enabled' => false,
57+
'key' => 'filament-shield::filament-shield',
6558
],
6659

67-
'exclude' => [
68-
'enabled' => true,
60+
'resources' => [
61+
'subject' => 'model',
62+
'manage' => [],
63+
'exclude' => [],
64+
],
6965

70-
'pages' => [
71-
'Dashboard',
66+
'pages' => [
67+
'subject' => 'class',
68+
'prefix' => 'view',
69+
'exclude' => [
70+
Dashboard::class,
7271
],
72+
],
7373

74-
'widgets' => [
75-
'AccountWidget', 'FilamentInfoWidget',
74+
'widgets' => [
75+
'subject' => 'class',
76+
'prefix' => 'view',
77+
'exclude' => [
78+
AccountWidget::class,
79+
FilamentInfoWidget::class,
7680
],
81+
],
7782

78-
'resources' => [],
83+
'custom_permissions' => [
84+
'impersonate_user',
85+
'send_email_user',
7986
],
8087

8188
'discovery' => [
@@ -84,8 +91,5 @@
8491
'discover_all_pages' => false,
8592
],
8693

87-
'register_role_policy' => [
88-
'enabled' => true,
89-
],
90-
94+
'register_role_policy' => true,
9195
];

config/themes.php

Lines changed: 0 additions & 36 deletions
This file was deleted.

database/migrations/2025_05_27_071139_add_themes_settings_to_users_table.php

Lines changed: 0 additions & 23 deletions
This file was deleted.

database/seeders/CoreSeeder.php

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
namespace Eclipse\Core\Database\Seeders;
44

5+
use Eclipse\Core\Models\Site;
6+
use Eclipse\Core\Models\User\Permission;
7+
use Eclipse\Core\Models\User\Role;
58
use Illuminate\Database\Seeder;
69
use Illuminate\Support\Facades\Artisan;
710

@@ -16,7 +19,6 @@ public function run(): void
1619
'--all' => null,
1720
'--panel' => 'admin',
1821
'--option' => 'permissions',
19-
'--minimal' => null,
2022
]);
2123

2224
// Seed additional roles
@@ -25,7 +27,37 @@ public function run(): void
2527
// Sites
2628
$this->call(SiteSeeder::class);
2729

30+
// Assign permissions to roles
31+
$this->assignPermissionsToRoles();
32+
2833
// Users
2934
$this->call(UserSeeder::class);
3035
}
36+
37+
private function assignPermissionsToRoles(): void
38+
{
39+
$allPermissions = Permission::all();
40+
41+
foreach (Site::all() as $site) {
42+
foreach (['super_admin', 'admin'] as $roleName) {
43+
$role = Role::firstOrCreate([
44+
'name' => $roleName,
45+
'guard_name' => 'web',
46+
'site_id' => $site->id,
47+
]);
48+
49+
$role->syncPermissions($allPermissions);
50+
}
51+
}
52+
53+
$this->assignCustomPermissionsToRoles();
54+
}
55+
56+
private function assignCustomPermissionsToRoles(): void
57+
{
58+
app(\Spatie\Permission\PermissionRegistrar::class)->forgetCachedPermissions();
59+
$guard = config('auth.defaults.guard', 'web');
60+
Permission::findOrCreate('impersonate_user', $guard);
61+
Permission::findOrCreate('send_email_user', $guard);
62+
}
3163
}

database/seeders/RoleSeeder.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@ public function run(): void
1414
{
1515
if (is_array(config('eclipse.seed.roles.presets'))) {
1616
foreach (config('eclipse.seed.roles.presets') as $preset) {
17-
Role::create($preset['data']);
17+
$data = $preset['data'];
18+
Role::firstOrCreate([
19+
'name' => $data['name'],
20+
'guard_name' => $data['guard_name'] ?? 'web',
21+
], $data);
1822
}
1923
}
2024

resources/views/filament/components/my-settings.blade.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@
99
@endphp
1010

1111
<div class="fi-dropdown-list p-1">
12-
<a @if ($hasSpaMode) wire:navigate @endif href="{{ ManageUserSettings::getUrl() }}"
13-
class="fi-dropdown-list-item flex w-full items-center gap-2 whitespace-nowrap rounded-md p-2 text-sm transition-colors duration-75 outline-none disabled:pointer-events-none disabled:opacity-70 hover:bg-gray-50 focus-visible:bg-gray-50 dark:hover:bg-white/5 dark:focus-visible:bg-white/5 fi-dropdown-list-item-color-gray fi-color-gray">
12+
<a @if ($hasSpaMode) wire:navigate @endif
13+
href="{{ ManageUserSettings::getUrl(['tenant' => Filament::getTenant() ?? \Eclipse\Core\Models\Site::firstWhere('domain', request()->getHost())]) }}"
14+
class="fi-dropdown-list-item flex w-full items-center gap-2 whitespace-nowrap rounded-md p-2 text-sm transition-colors duration-75 outline-none disabled:pointer-events-none disabled:opacity-70 hover:bg-gray-50 focus-visible:bg-gray-50 dark:hover:bg-white/5 dark:focus-visible:bg-white/5 fi-dropdown-list-item-color-gray fi-color-gray">
1415
<x-filament::icon class="fi-dropdown-list-item-icon h-5 w-5 text-gray-400 dark:text-gray-500" icon="{{ $navigationIcon }}" />
1516
{{ __($navigationLabel) }}
1617
</a>

src/Console/Commands/PostComposerUpdate.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ public function handle(): void
3131
// ------------------
3232
$this->call('vendor:publish', ['--tag' => 'laravel-assets', '--force' => true]);
3333
$this->call('log-viewer:publish');
34-
$this->call('themes:upgrade');
3534

3635
// ------------------
3736

0 commit comments

Comments
 (0)