Step-by-Step Guide to Filament Multi-Tenancy

Поділитися
Вставка
  • Опубліковано 14 січ 2025

КОМЕНТАРІ • 43

  • @Tuto1902
    @Tuto1902  Рік тому +5

    WARNING *** PLEASE READ ***
    17:00 Tenant middleware no longer goes inside the ->middleware() section. This will result in Filament::getTenant() returning null. Instead, now you need to use the ->tenantMiddleware() function. Here's the documentation link so you can read all about it: filamentphp.com/docs/3.x/panels/tenancy#using-tenant-aware-middleware-to-apply-global-scopes

  • @jadersbr
    @jadersbr 3 місяці тому +1

    Thanks for share 🥇

    • @Tuto1902
      @Tuto1902  2 місяці тому

      No problem 👍

  • @shaungbhone8368
    @shaungbhone8368 4 місяці тому +1

    Thank you very much. You save my day. Can you show me the database?

    • @Tuto1902
      @Tuto1902  4 місяці тому

      Here's the entire code, including database migrations github.com/tuto1902/filament-multi-tenancy

  • @wakathepublic
    @wakathepublic 11 місяців тому +1

    can you make import excel, csv or another file for handling user in multi tenant ?

    • @Tuto1902
      @Tuto1902  10 місяців тому

      I’ll make a note for it. Thanks for the suggestion

  • @HamadAbdulla_7
    @HamadAbdulla_7 Рік тому +1

    Thank you😍

    • @Tuto1902
      @Tuto1902  Рік тому

      It is my absolute pleasure. I’m glad you find it helpful

  • @jonmason9024
    @jonmason9024 Рік тому +2

    Is there a way to tap into whatever event is fired when a tenant is changed? I want to do something whenever a user changes the tenant, but can't find anything in the docs to see how to do it?

    • @Tuto1902
      @Tuto1902  Рік тому

      I don't think there's a way to do that. At least none that I know of

    • @philately
      @philately 8 місяців тому +2

      @@Tuto1902 Actually, there is. Every time a new tenant is set as "active" an Filament\Events\TenantSet is fired. You can register a listener to it and you're good to go.

  • @jensb5519
    @jensb5519 8 місяців тому

    Nice and clear tutorial! But is it possible to combine this with the Filament Shield plugin?

    • @Tuto1902
      @Tuto1902  8 місяців тому

      I think so. The way I see it, the shield plugin works as a second layer. First, can the user access the tenant. Second, what can the user do inside the tenant (Shield). I haven't tested this myself but I see no reason why it shouldn't work

  • @FindWebX
    @FindWebX Рік тому +1

    If the Jetstream Team, is similar to this? Thank you very much for valuable video❤❤❤

    • @Tuto1902
      @Tuto1902  Рік тому

      I appreciate you watching and I'm glad you find it helpful.

  • @tahinuralam29
    @tahinuralam29 9 місяців тому

    How can I set the navigation bage count for the current tenant

    • @Tuto1902
      @Tuto1902  9 місяців тому

      I would just follow the docs. All queries made on resources should be scoped to the current tenant
      filamentphp.com/docs/3.x/panels/navigation#adding-a-badge-to-a-navigation-item
      As long as the model has the tenant relationships properly configured, everything should work as expected
      filamentphp.com/docs/3.x/panels/tenancy#configuring-the-tenant-relationships

  • @augustocarvalhochavez3192
    @augustocarvalhochavez3192 Рік тому

    I have a model called category but I would like it to be shown in all the authenticated user's teams since they can have several teams?

    • @Tuto1902
      @Tuto1902  Рік тому

      Create a ManyToMany relationship between Category and Team. Keep in mind that filament will try to look for a relationship called team() in the Category model. But since you want a ManyToMany relationship, I would suggest a relationship called teams() and then modify the owner relationship name in the CategoryResource class
      protected static ?string $tenantOwnershipRelationshipName = 'teams';

    • @augustocarvalhochavez3192
      @augustocarvalhochavez3192 Рік тому

      @@Tuto1902 Thank you very much for answering.
      So I edited the Resource and it worked for me.
      public static function getEloquentQuery(): Builder
      {
      $team_id= Auth::user()->teams->pluck('id');
      return Category::whereIn('team_id', $team_id);
      }

  • @WawangBprnbp
    @WawangBprnbp Рік тому

    that's very helpful, thank you, but I'm having problems inputting customer data, do I have to add team_id to the customer table, and what should the relationship be like? I don't really understand how it works

    • @Tuto1902
      @Tuto1902  Рік тому +1

      It all depends on what you’re trying to do. If your customers are going to belong to just one team, then yes. You need a team_id in the customers table and the relationship is One to Many (one team has many customers). But if the customer can have access to multiple teams, then you need a pivot table (customer_team) and the relationship is Many to Many

    • @WawangBprnbp
      @WawangBprnbp Рік тому

      okay tanks@@Tuto1902

  • @marianovallejos6542
    @marianovallejos6542 Рік тому

    how solve nested relation ? All the tables need team_id record?

    • @Tuto1902
      @Tuto1902  Рік тому +1

      If the records Belong To a single team, yes. If the records can Belong To Many different teams, then you need a pivot table and probably adjust the owner relationship name in the resource class
      filamentphp.com/docs/3.x/panels/tenancy

  • @ruddra_nick_biswas
    @ruddra_nick_biswas 6 місяців тому +1

    Hello Can you help me with this! I want to disable user to create new team! admin will create team for them! how can I achieve that kind of functionality ??

    • @Tuto1902
      @Tuto1902  6 місяців тому +1

      Have you tried adding a TeamPolicy with a create() method?
      laravel.com/docs/11.x/authorization#policy-methods
      Filament will enforce any policy automatically.

  • @ZAGAfrica
    @ZAGAfrica 2 місяці тому +1

    No Github Repo because there are gaps especially in your DB

    • @Tuto1902
      @Tuto1902  2 місяці тому

      Probably, I wasn't focused on DB but more on quick tenancy setup. If you can elaborate on the gaps you found, I would love to hear your feedback

  • @EvandroNeres-t8b
    @EvandroNeres-t8b 4 місяці тому

    What VS extensions are you using?

    • @Tuto1902
      @Tuto1902  4 місяці тому

      Catppuccin for VS Code, Catppuccin Icons and all the regular Intelephense extensions.

  • @proskillscenter9589
    @proskillscenter9589 6 місяців тому

    are this method support multi domains ?

    • @Tuto1902
      @Tuto1902  4 місяці тому

      Nope, this only covers single domain multi-tenancy.

  • @1234321marty
    @1234321marty Рік тому

    How about global scope in model, can I still use it selected tenant instead of middlawere in resource?

    • @Tuto1902
      @Tuto1902  Рік тому +1

      Yeah, that works too. I forgot to mention that option. That way you don’t need to fiddle with the panel configuration and it will give you the same results

    • @joeyboli
      @joeyboli Рік тому

      Did it work for you, it doesnt work for me

  • @rialmon
    @rialmon Рік тому

    Hi Tuto, thank you very much for this tutorial! I have a question, would you like to help me?. I'm facing this error: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'db_name.team_user' doesn't exist. How do i fix it?

    • @rialmon
      @rialmon Рік тому

      Tuto, i've just found the solution: i only needed to create a pivot table named team_user, by executing "php artisan make:migration create_team_user_table"; then i put into the schema both $table->integer('user_id') and $table->integer('team_id'); then, finally, i run the migration.

    • @Tuto1902
      @Tuto1902  Рік тому +1

      That works, but this doesn't enforce the foreign keys in the database. I would recommend using $table->foreignIdFor(App\Models\User::class) and $table->foreignIdFor(App\Models\Team::class). This creates the appropriate indexes and makes the table more read efficient.