Linked Devices (Perangkat Terhubung)
| Code | ACC-DEV |
| Module | Account |
| Type | Session management |
| Status | Implemented |
| Priority | P1 |
| Process | Keamanan akun pribadi |
| API | [URL Postman] |
1. Overview
Perangkat Terhubung menampilkan semua sesi login aktif milik pengguna: perangkat, platform, browser, alamat IP, lokasi (kota/negara), dan waktu aktivitas terakhir. Perangkat yang sedang dipakai ditandai Perangkat Ini. Pengguna bisa mencabut satu perangkat, yaitu mengeluarkan sesi di perangkat itu, atau mencabut semua perangkat sekaligus. Perangkat bisa dilihat sebagai kartu (grid) atau di peta.
Hasil yang diharapkan: pengguna bisa mendeteksi login yang tidak dikenal dan segera mengeluarkannya.
2. Problem
- Pengguna sering login di perangkat bersama (komputer kasir, ponsel rekan) dan lupa logout.
- Login dari lokasi tak dikenal tidak terdeteksi tanpa daftar sesi.
- Setelah perangkat hilang, pengguna perlu cara mengeluarkan sesi dari jarak jauh.
3. Goals & Non-goals
Goals
- Pengguna melihat semua sesi aktifnya. Indikator: daftar perangkat dengan lokasi dan aktivitas terakhir.
- Pengguna bisa mengeluarkan sesi mana pun. Indikator: cabut satu perangkat atau semua perangkat.
Non-goals
- Admin mencabut sesi pengguna lain
- Notifikasi otomatis saat ada login baru
- Memberi nama perangkat secara manual
4. User Scenarios
| Role | Scenario |
|---|---|
| Kasir | Mencabut sesi di komputer kasir lama yang lupa di-logout |
| Owner | Melihat peta dan menemukan login dari kota yang tidak dikenal, lalu mencabutnya |
| Semua pengguna | Ponsel hilang; mencabut semua perangkat dari laptop |
5. User Flow
- Daftar perangkat — Perangkat Ini selalu di urutan pertama dan ditandai cincin warna utama. Setiap kartu menampilkan nama perangkat, ikon sesuai tipe, badge Perangkat Ini / Perangkat Lain, tipe, platform, browser, user agent, IP, kota, negara, dan aktivitas terakhir. Pilihan tampilan grid/peta disimpan di browser.
- Cari — Menyaring berdasarkan nama perangkat (di sisi klien).
- Cabut satu — Tombol cabut hanya ada pada perangkat lain; konfirmasi “Perangkat akan langsung dikeluarkan”.
- Cabut semua — Tombol di header; konfirmasi “Anda akan keluar dari semua sesi aktif”.
- Sesi berakhir — Toast sukses, daftar dimuat ulang.
- Semua sesi berakhir — Toast sukses, daftar dimuat ulang (lihat EC-01).
Alternative paths
- Tampilan peta — Perangkat yang punya koordinat tampil sebagai marker. Peta menyesuaikan batas agar semua marker terlihat, atau berpusat pada satu titik bila hanya satu. Marker menampilkan tooltip dan popup detail beserta tombol cabut.
6. User Stories
Prioritas: P0 wajib untuk rilis, P1 penting, P2 kalau sempat.
US-01 — Melihat perangkat terhubung (P1)
Sebagai pengguna, saya ingin melihat semua sesi login saya, agar tahu perangkat mana yang masih masuk.
| ID | Kriteria penerimaan |
|---|---|
| AC-01.1 | Perangkat Ini ditampilkan paling atas dan ditandai. |
| AC-01.2 | Setiap perangkat menampilkan tipe, platform, browser, user agent, IP, kota, negara, dan aktivitas terakhir; nilai kosong memakai fallback. |
| AC-01.3 | Pencarian menyaring berdasarkan nama perangkat. |
| AC-01.4 | Skeleton tampil selama data dimuat. |
US-02 — Tampilan peta (P2)
Sebagai owner, saya ingin melihat lokasi login di peta, agar login mencurigakan mudah terlihat.
| ID | Kriteria penerimaan |
|---|---|
| AC-02.1 | Hanya perangkat dengan latitude dan longitude yang tampil sebagai marker. |
| AC-02.2 | Peta menyesuaikan batas ke semua marker; bila satu marker, peta berpusat padanya. |
| AC-02.3 | Marker punya tooltip dan popup detail dengan aksi cabut (untuk perangkat lain). |
| AC-02.4 | Pilihan tampilan grid/peta tersimpan di browser. |
US-03 — Mencabut satu perangkat (P1)
Sebagai pengguna, saya ingin mengeluarkan sesi di perangkat tertentu.
| ID | Kriteria penerimaan |
|---|---|
| AC-03.1 | Aksi cabut hanya tersedia untuk perangkat selain Perangkat Ini. |
| AC-03.2 | Setelah konfirmasi, sesi perangkat berakhir, toast sukses tampil, dan daftar dimuat ulang. |
US-04 — Mencabut semua perangkat (P1)
Sebagai pengguna, saya ingin keluar dari semua sesi sekaligus.
| ID | Kriteria penerimaan |
|---|---|
| AC-04.1 | Tombol Cabut Semua Perangkat tersedia di header dengan konfirmasi. |
| AC-04.2 | Setelah berhasil, semua sesi (termasuk perangkat ini, sesuai teks konfirmasi) berakhir. |
7. Document Structure
| Field | Required | Default | Notes |
|---|---|---|---|
id | — | — | Id sesi/perangkat |
Nama perangkat (device_name) | — | Fallback “Tidak Ada Nama Perangkat” | |
Tipe perangkat (device_type) | — | Fallback “Tidak Ada Tipe Perangkat” | Menentukan ikon |
| Platform, Browser, User Agent | — | — | |
| Alamat IP | — | — | |
| Kota, Negara | — | — | Dari geolokasi IP (BE) |
latitude, longitude | — | — | Untuk peta; nullable |
Aktivitas terakhir (last_activity_at) | — | — | Tanggal dan jam |
Perangkat Ini (is_current_device) | — | — | Ditentukan BE dari sesi saat ini |
8. Status Lifecycle
| Status | Label UI | Meaning | Editable | Next status |
|---|---|---|---|---|
| Aktif | Tampil di daftar | Sesi masih berlaku | — | Dicabut |
| Dicabut | Tidak tampil | Sesi berakhir, perangkat harus login ulang | — | — |
9. Permissions & Actions
Permissions
| Action | Permission | Syarat tambahan |
|---|---|---|
| Lihat dan cabut perangkat | — | Pengguna login; hanya sesi milik sendiri |
Actions by status (✓ tersedia)
| Action | Perangkat Ini | Perangkat Lain |
|---|---|---|
| Lihat detail | ✓ | ✓ |
| Cabut | — | ✓ |
| Tercakup Cabut Semua | ✓ | ✓ |
10. Business Rules
Aturan bisnis adalah ketentuan yang berlaku di semua layar dan semua aksi, siapa pun yang melakukannya. FE memakainya sebagai validasi di form, BE memakainya sebagai sumber kebenaran; jika keduanya berbeda, perilaku BE yang dianggap benar dan FE menyesuaikan.
- BR-01 Satu perangkat = satu sesi login (token refresh) milik pengguna.
- BR-02 Perangkat yang sedang dipakai tidak bisa dicabut satu per satu (gunakan logout).
- BR-03 Mencabut perangkat membuat sesi perangkat itu tidak berlaku; request berikutnya dari perangkat itu harus gagal dan diarahkan ke login.
- BR-04 Lokasi dan koordinat ditentukan BE dari alamat IP dan bersifat perkiraan.
- BR-05 Pencarian dilakukan di klien terhadap daftar yang sudah dimuat.
11. Edge Cases
Edge case adalah kondisi yang jarang terjadi tetapi pasti muncul di operasional nyata. Perilaku yang diharapkan ditetapkan di sini agar tidak diputuskan sendiri-sendiri saat implementasi.
| ID | Case | Expected behavior |
|---|---|---|
| EC-01 | Cabut Semua termasuk perangkat ini | FE hanya memuat ulang daftar dan tidak langsung logout; pengguna baru keluar saat request berikutnya ditolak. Sebaiknya FE langsung mengarahkan ke login setelah berhasil |
| EC-02 | Perangkat tanpa koordinat | Tidak tampil di peta, tetap tampil di grid |
| EC-03 | Tidak ada perangkat dengan koordinat | Peta berpusat di [0, 0] tanpa marker |
| EC-04 | Nama/tipe perangkat tidak terdeteksi | Menampilkan teks fallback |
| EC-05 | Sesi dicabut saat perangkat itu sedang dipakai | Refresh token gagal; perangkat diarahkan ke login |
12. API Contract
| Action | Method | Endpoint | Ref |
|---|---|---|---|
| Daftar perangkat | GET | /api/auth/devices | US-01, US-02 |
| Cabut satu perangkat | DELETE | /api/auth/devices/:id | US-03 |
| Cabut semua perangkat | POST | /api/auth/devices/revoke-all | US-04 |
13. Dependencies
PRD terkait
- My Account — keamanan akun (ganti kata sandi, lalu cabut sesi lain).
- Notifications — subscription push terikat ke browser/perangkat.
Infrastruktur
- Auth refresh terkoordinasi (proxy + lock) — sesi yang dicabut harus gagal saat refresh.
- Komponen peta (MapLibre).