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, ...) |