tenancy-docs/source/docs/v3/integrations/spatie.blade.md
Svetlin Stoev 196ebaa5b6
Update spatie.blade.md
When a tenant is created through the central app TenancyBootstraped is called and wrong permissions are cached if permissions between central and tenant apps are different.
2021-11-27 20:35:22 +02:00

44 lines
1.9 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Integration with Spatie packages
extends: _layouts.documentation
section: content
---
# Integration with Spatie packages {#integration-with-spatie-packages}
## **laravel-activitylog** {#laravel-activitylog}
### For the tenant app: {#for-the-tenant-app}
- Set the `database_connection` key in `config/activitylog.php` to `null`. This makes activitylog use the default connection.
- Publish the migrations and move them to `database/migrations/tenant`. (And, of course, don't forget to run `artisan tenants:migrate`.)
### For the central app: {#for-the-central-app}
- Set the `database_connection` key in `config/activitylog.php` to the name of your central database connection.
## **laravel-permission** {#laravel-permission}
Install the package like usual, but publish the migrations and move them to `migrations/tenant`:
```
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"
mv database/migrations/*_create_permission_tables.php database/migrations/tenant
```
Then add this to your `AppServiceProvider::boot()` method:
```php
Event::listen(TenancyBootstrapped::class, function (TenancyBootstrapped $event) {
// TenancyBootstraped event is called if you are creating tenants through the central app,
// so to prevent making caches with wrong permissions the code below can be used
//
// $isACentralDomain = in_array(request()->getHost(), config('tenancy.central_domains'), true);
// if(!$isACentralDomain) {
// \Spatie\Permission\PermissionRegistrar::$cacheKey = 'spatie.permission.cache.tenant.' . $event->tenancy->tenant->id;
// }
\Spatie\Permission\PermissionRegistrar::$cacheKey = 'spatie.permission.cache.tenant.' . $event->tenancy->tenant->id;
});
```
The reason for this is that spatie/laravel-permission caches permissions & roles to save DB queries, which means that we need to separate the permission cache by tenant.