ebc4fe0f23d13437e31bb6431768ccc0e9c4861c
isMechanic() calls hasAnyRole(['mechanic']) via Spatie which checks the model_has_roles table with team_id scoping. If roles are not correctly seeded for a tenant, admins/owners could accidentally pass the mechanic filter and see only WOs where master_id = their own id (i.e. nothing). Now uses $user->role === 'mechanic' directly — no Spatie involved — so admin/owner/manager always see all WOs in their tenant. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
AutoCRM
SaaS CRM multi-tenant pentru autoservice și magazin piese auto.
Stack
- Laravel 12 + Filament 5
- Octane (FrankenPHP runtime)
- MariaDB 11.4
- Redis 7
- Stancl/Tenancy v3 (single-DB multi-tenant)
Domenii
service.mir.md— panou central super-admin<slug>.service.mir.md— instanță tenant
Documentație
Vezi /root/service/docs/00-index.md în repo-ul părinte (separat de cod) pentru:
- Arhitectură + decizii
- Setup multi-tenant (3 niveluri izolare)
- Toate cele 31 module preluate din prototip
- Operațiuni (deploy / backup / add-tenant / troubleshoot)
Dev local
cp .env.example .env
composer install
npm install
php artisan key:generate
php artisan migrate
npm run build
php artisan octane:start --server=frankenphp
Deploy
Push pe main → Coolify auto-deploy.
License
Proprietary. © 2026.
Description
Languages
PHP
78.1%
Blade
21.6%
Dockerfile
0.2%
Shell
0.1%