Poin penting
- Data setiap restoran dipisahkan di dalam basis data itu sendiri, tidak hanya di aplikasi.
- Kata sandi di-hash dengan scrypt; kegagalan berulang mengunci akun selama 15 menit.
- Sesi dirotasi setiap kali diperbarui, dan sesi yang digunakan ulang akan mengakhiri seluruh rangkaian sesi masuk.
- Catatan pesanan, tunai, poin, dan audit hanya dapat ditambah.
Setiap restoran dalam ruangnya sendiri
Semua restoran berjalan di satu platform, tetapi basis datalah yang menegakkan pemisahannya. Setiap tabel restoran mengaktifkan dan mewajibkan keamanan tingkat baris (row-level security), dan setiap permintaan berjalan dalam transaksi yang diatur untuk satu restoran. Akun yang digunakan aplikasi tidak dapat melewati aturan tersebut.
Dua peran internal diizinkan melewatinya untuk tugas yang terbatas: proses latar belakang, yang hanya boleh mencantumkan restoran mana yang aktif sebelum menjalankan tugasnya satu per satu untuk setiap restoran, dan pusat kendali tim SCALE, yang tidak memiliki akses ke alamat pelanggan, lokasi pesanan, hash kata sandi, atau log audit milik restoran.
Proses masuk dan kata sandi
- Kata sandi terdiri dari 8 hingga 128 karakter dan disimpan sebagai hash scrypt dengan salt acak; perbandingannya dilakukan dalam waktu konstan.
- Lima kali salah kata sandi mengunci akun selama 15 menit. Mencoba masuk ke akun yang tidak ada memakan waktu yang sama, sehingga tidak mengungkap akun mana yang ada.
- Percobaan masuk juga dibatasi per alamat dalam rentang 15 menit: 10 untuk staf, 60 untuk pelanggan, dan 5 pendaftaran pelanggan baru. Hitungan ini digunakan bersama oleh semua server.
- Kode verifikasi terdiri dari 6 digit, kedaluwarsa setelah 10 menit, dan hanya dapat dicoba dalam jumlah terbatas.
- Perlindungan bot Cloudflare dapat diaktifkan untuk proses masuk dan pembuatan pesanan.
Sesi yang tidak dapat digunakan ulang
Proses masuk memberikan token akses berumur pendek (15 menit secara default) dan token penyegaran (refresh token). Setiap penyegaran mengganti token penyegaran dengan yang baru. Jika token lama digunakan lagi, seluruh rangkaian sesi diakhiri, sehingga token yang dicuri tidak dapat digunakan dalam waktu lama.
Setiap permintaan juga memeriksa bahwa sesi masih aktif, sehingga menghapus anggota staf, mengubah kata sandinya, atau menurunkan perannya akan membuatnya keluar di semua perangkat sekaligus. Cookie konsol tidak dapat dibaca oleh skrip halaman dan tidak dikirim oleh situs lain.
Peran dengan hak akses minimum
Akses disusun dari 29 hak akses, mulai dari membaca pesanan hingga mengonfirmasi pembayaran tunai atau mengelola staf. Pemilik dapat membuat peran dengan kombinasi apa pun dari hak akses tersebut, dan staf dapat dibatasi ke satu cabang. Tidak seorang pun dapat memberikan hak akses yang tidak dimilikinya sendiri, peran bawaan tidak dapat diedit, dan pemilik aktif terakhir tidak dapat dihapus.
Konsol menyembunyikan apa yang tidak dapat digunakan oleh suatu peran, tetapi itu hanya demi kejelasan: server memeriksa hak akses, cabang, dan keanggotaan pada setiap tindakan.
Catatan yang tidak dapat ditulis ulang
Perubahan status pesanan, buku besar poin, pergerakan stok, riwayat harga, dan log audit hanya dapat ditambah. Basis data menolak setiap pembaruan atau penghapusan, sehingga koreksi dilakukan dengan menambahkan entri baru yang terlihat.
Menghormati data pelanggan
- Lokasi pesanan hanya diambil saat aplikasi terbuka, dengan persetujuan, dan dihapus setelah 180 hari.
- Pelanggan dapat menghapus akun mereka dari situs atau aplikasi. Alamat, lokasi, perangkat, notifikasi, dan kata sandi mereka dihapus, dan profil mereka dianonimkan.
- Untuk mencegah orang yang sama mengklaim kembali penawaran pelanggan baru, hanya sidik digital terlindungi dari nomor telepon dan email mereka yang disimpan.