You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

FilamentCompaniesServiceProvider.php 7.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <?php
  2. namespace App\Providers;
  3. use App\Actions\FilamentCompanies\AddCompanyEmployee;
  4. use App\Actions\FilamentCompanies\CreateConnectedAccount;
  5. use App\Actions\FilamentCompanies\CreateNewUser;
  6. use App\Actions\FilamentCompanies\CreateUserFromProvider;
  7. use App\Actions\FilamentCompanies\DeleteCompany;
  8. use App\Actions\FilamentCompanies\DeleteUser;
  9. use App\Actions\FilamentCompanies\HandleInvalidState;
  10. use App\Actions\FilamentCompanies\InviteCompanyEmployee;
  11. use App\Actions\FilamentCompanies\RemoveCompanyEmployee;
  12. use App\Actions\FilamentCompanies\ResolveSocialiteUser;
  13. use App\Actions\FilamentCompanies\SetUserPassword;
  14. use App\Actions\FilamentCompanies\UpdateCompanyName;
  15. use App\Actions\FilamentCompanies\UpdateConnectedAccount;
  16. use App\Actions\FilamentCompanies\UpdateUserPassword;
  17. use App\Actions\FilamentCompanies\UpdateUserProfileInformation;
  18. use App\Filament\Company\Pages\CreateCompany;
  19. use Illuminate\Support\Facades\Auth;
  20. use Wallo\FilamentCompanies\Actions\GenerateRedirectForProvider;
  21. use Wallo\FilamentCompanies\Pages\Auth\Login;
  22. use Wallo\FilamentCompanies\Pages\Company\CompanySettings;
  23. use Filament\Navigation\MenuItem;
  24. use Wallo\FilamentCompanies\Pages\Auth\Register;
  25. use App\Models\Company;
  26. use Filament\Http\Middleware\Authenticate;
  27. use Filament\Http\Middleware\DisableBladeIconComponents;
  28. use Filament\Http\Middleware\DispatchServingFilamentEvent;
  29. use Filament\Pages;
  30. use Filament\Panel;
  31. use Filament\PanelProvider;
  32. use Filament\Support\Colors\Color;
  33. use Filament\Widgets;
  34. use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
  35. use Illuminate\Cookie\Middleware\EncryptCookies;
  36. use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
  37. use Illuminate\Routing\Middleware\SubstituteBindings;
  38. use Illuminate\Session\Middleware\AuthenticateSession;
  39. use Illuminate\Session\Middleware\StartSession;
  40. use Illuminate\View\Middleware\ShareErrorsFromSession;
  41. use Wallo\FilamentCompanies\FilamentCompanies;
  42. use Wallo\FilamentCompanies\Pages\User\Profile;
  43. use Wallo\FilamentCompanies\Providers;
  44. use Wallo\FilamentCompanies\Socialite;
  45. class FilamentCompaniesServiceProvider extends PanelProvider
  46. {
  47. public function panel(Panel $panel): Panel
  48. {
  49. return $panel
  50. ->default()
  51. ->id('company')
  52. ->path('company')
  53. ->login(Login::class)
  54. ->registration(Register::class)
  55. ->passwordReset()
  56. ->homeUrl(static fn (): string => url(Pages\Dashboard::getUrl(panel: 'company', tenant: Auth::user()?->personalCompany())))
  57. ->plugin(
  58. FilamentCompanies::make()
  59. ->userPanel('user')
  60. ->switchCurrentCompany()
  61. ->updateProfileInformation()
  62. ->updatePasswords()
  63. ->setPasswords()
  64. ->connectedAccounts()
  65. ->manageBrowserSessions()
  66. ->accountDeletion()
  67. ->profilePhotos()
  68. ->api()
  69. ->companies(invitations: true)
  70. ->termsAndPrivacyPolicy()
  71. ->notifications()
  72. ->modals()
  73. ->socialite(
  74. providers: [Providers::github()],
  75. features: [Socialite::rememberSession(), Socialite::providerAvatars()]
  76. ),
  77. )
  78. ->colors([
  79. 'primary' => Color::Indigo,
  80. ])
  81. ->sidebarCollapsibleOnDesktop()
  82. ->viteTheme('resources/css/filament/company/theme.css')
  83. ->tenant(Company::class)
  84. ->tenantProfile(CompanySettings::class)
  85. ->tenantRegistration(CreateCompany::class)
  86. ->discoverResources(in: app_path('Filament/Company/Resources'), for: 'App\\Filament\\Company\\Resources')
  87. ->discoverPages(in: app_path('Filament/Company/Pages'), for: 'App\\Filament\\Company\\Pages')
  88. ->pages([
  89. Pages\Dashboard::class,
  90. ])
  91. ->userMenuItems([
  92. 'profile' => MenuItem::make()
  93. ->label('Profile')
  94. ->icon('heroicon-o-user-circle')
  95. ->url(static fn () => route(Profile::getRouteName(panel: 'user'))),
  96. ])
  97. ->authGuard('web')
  98. ->discoverWidgets(in: app_path('Filament/Company/Widgets'), for: 'App\\Filament\\Company\\Widgets')
  99. ->widgets([
  100. Widgets\AccountWidget::class,
  101. Widgets\FilamentInfoWidget::class,
  102. ])
  103. ->middleware([
  104. EncryptCookies::class,
  105. AddQueuedCookiesToResponse::class,
  106. StartSession::class,
  107. AuthenticateSession::class,
  108. ShareErrorsFromSession::class,
  109. VerifyCsrfToken::class,
  110. SubstituteBindings::class,
  111. DisableBladeIconComponents::class,
  112. DispatchServingFilamentEvent::class,
  113. ])
  114. ->authMiddleware([
  115. Authenticate::class,
  116. ]);
  117. }
  118. /**
  119. * Bootstrap any application services.
  120. */
  121. public function boot(): void
  122. {
  123. $this->configurePermissions();
  124. FilamentCompanies::createUsersUsing(CreateNewUser::class);
  125. FilamentCompanies::updateUserProfileInformationUsing(UpdateUserProfileInformation::class);
  126. FilamentCompanies::updateUserPasswordsUsing(UpdateUserPassword::class);
  127. FilamentCompanies::createCompaniesUsing(CreateCompany::class);
  128. FilamentCompanies::updateCompanyNamesUsing(UpdateCompanyName::class);
  129. FilamentCompanies::addCompanyEmployeesUsing(AddCompanyEmployee::class);
  130. FilamentCompanies::inviteCompanyEmployeesUsing(InviteCompanyEmployee::class);
  131. FilamentCompanies::removeCompanyEmployeesUsing(RemoveCompanyEmployee::class);
  132. FilamentCompanies::deleteCompaniesUsing(DeleteCompany::class);
  133. FilamentCompanies::deleteUsersUsing(DeleteUser::class);
  134. Socialite::resolvesSocialiteUsersUsing(ResolveSocialiteUser::class);
  135. Socialite::createUsersFromProviderUsing(CreateUserFromProvider::class);
  136. Socialite::createConnectedAccountsUsing(CreateConnectedAccount::class);
  137. Socialite::updateConnectedAccountsUsing(UpdateConnectedAccount::class);
  138. Socialite::setUserPasswordsUsing(SetUserPassword::class);
  139. Socialite::handlesInvalidStateUsing(HandleInvalidState::class);
  140. Socialite::generatesProvidersRedirectsUsing(GenerateRedirectForProvider::class);
  141. }
  142. /**
  143. * Configure the roles and permissions that are available within the application.
  144. */
  145. protected function configurePermissions(): void
  146. {
  147. FilamentCompanies::defaultApiTokenPermissions(['read']);
  148. FilamentCompanies::role('admin', 'Administrator', [
  149. 'create',
  150. 'read',
  151. 'update',
  152. 'delete',
  153. ])->description('Administrator users can perform any action.');
  154. FilamentCompanies::role('editor', 'Editor', [
  155. 'read',
  156. 'create',
  157. 'update',
  158. ])->description('Editor users have the ability to read, create, and update.');
  159. }
  160. }