Tổng quan kiến trúc phân quyền & Multi-tenant

Kiến trúc

spatie/laravel-permission v8.0.0
├── Team feature (company_id) → Multi-tenant theo công ty
├── Guard: employee
├── Custom models: App\Models\Role, App\Models\Permission
├── Middleware: role, permission, role_or_permission
└── Permission groups: App\Models\PermissionGroup (giữ lại từ code cũ)

Các thành phần chính

Thành phần File Mô tả
Config config/permission.php Cấu hình Spatie: team, guard, models
Role app/Models/Role.php Extends Spatie\Permission\Models\Role
Permission app/Models/Permission.php Extends Spatie\Permission\Models\Permission + liên kết group
PermissionGroup app/Models/PermissionGroup.php Nhóm quyền (giữ lại từ code cũ)
EmployeeAccount app/Models/EmployeeAccount.php Auth model chính + HasRoles trait
Middleware bootstrap/app.php Đăng ký aliases: role, permission, role_or_permission

Luồng hoạt động

Request → Route (middleware:auth:employee + permission:xxx)
         → Controller (kiểm tra company scope)
             → Spatie Permission check (team-aware)
                 → Response

Database tables (Spatie)

Table Mục đích
roles Danh sách role (có company_id cho team)
permissions Danh sách permission (có company_id + permission_group_id)
model_has_roles Gán role cho EmployeeAccount
model_has_permissions Gán permission trực tiếp cho EmployeeAccount
role_has_permissions Gán permission cho role

Database tables (giữ lại từ code cũ)

Table Mục đích
permission_groups Nhóm quyền (company_management, department_management, ...)
Cài đặt & Cấu hình →