Guard & Provider
Admin Dazo menggunakan 2 guard yang terpisah dari dazoapp:
| Guard | Driver | Provider | Kegunaan |
|---|---|---|---|
web (default) | session | admins | Default Laravel guard |
admin | session | admins | Web admin panel (dipakai di AuthenticateAdmin middleware) |
Model auth: App\Models\Admin — MongoDB collection admins, menggunakan MongoDB\Laravel\Auth\User (bukan Eloquent standar).
Login Flow
- Admin mengakses
/login→AdminController::showLoginForm() - Jika belum ada admin sama sekali → auto-create superadmin (
superadmin@gmail.com/superadmin) - Submit credentials →
AdminController::login()→Auth::guard('admin')->attempt() - Jika berhasil → redirect ke
/admin/dashboard+ issue Sanctum token (createToken('API Token')) - Token disimpan via custom
PersonalAccessToken(MongoDB, bukan MySQL)
Middleware
AuthenticateAdmin (app/Http/Middleware/AuthenticateAdmin.php):
if (!Auth::guard('admin')->check()) {
return redirect()->route('admin.show.login');
}Semua route admin di-wrap dalam middleware ini (routes/web.php:51).
Permission Model
Bukan Spatie — custom embedded permission di model Admin.
Field permission di dokumen admin:
{
"permission": [
{ "name": "list user", "create": true, "read": true, "update": true, "delete": true },
{ "name": "list customer", "create": false, "read": true, "update": false, "delete": false }
]
}Helper
findPermissionByName($user, $permissionName) di app/Helpers/helpers.php:
- Jika
$user->role === 'superadmin'→ return full CRUD - Jika tidak → cari di array
permissionbyname, return{create, read, update, delete}
Pattern di Controller
Setiap method di controller dimulai dengan:
$user = auth()->guard('admin')->user();
$permission = findPermissionByName($user, 'list user');
if (!$permission || !$permission->read) {
return redirect()->route('accessdenied');
}Pattern ini diulang di hampir setiap method — tidak menggunakan middleware atau policy.
API Authentication
Route API (routes/api.php) menggunakan auth:sanctum (Laravel Sanctum). Token dibuat saat login web via createToken('API Token').
Custom PersonalAccessToken model di-alias ke App\Models\PersonalAccessToken agar token tersimpan di MongoDB (bukan MySQL).
Bug: PersonalAccessToken::updated()
Di AdminController.php:56:
PersonalAccessToken::updated(...) // Ini event method, bukan querySeharusnya update() atau updateOrCreate(). Kode ini tidak berfungsi — silently does nothing.
Role
| Role | Akses |
|---|---|
superadmin | Full access — bypass semua permission check |
| Lainnya | Terbatas sesuai array permission |
Role disimpan sebagai string field role di dokumen Admin.