rbac
Catatan teknis seputar web development, DevOps, dan integrasi AI.
3 artikel
- 05.35backend
COALESCE di Pintu API: Titip Nilai ALL di Kueri, Bukan di Handler
Super-admin tanpa bidang mengembalikan NULL dari database. Satu COALESCE di kueri login membuat kontrak API tetap total dan lencana admin tampil pas.
TL;DR: Kirain bug sepele soal lencana bidang super-admin yang hilang, ternyata DB ngasih NULL dan token lama belum punya kolom itu. Daripada nambal di tiap handler Go, mending sekalian beres di query pakai COALESCE biar selalu balikin 'ALL'. Di frontend tipenya dibikin opsional biar token lama nggak error, lencana juga cuma muncul kalau bidangnya bukan 'ALL'.
#mysql#golang#typescript - 05.04backend
Enforcement RBAC Bidang: Gerbang Middleware dan Filter IN
Enforcement scope bidang di Go: middleware di gerbang, filter IN di repository, dan subtest yang membaca seperti policy keamanan.
TL;DR: Gerbangnya dijaga middleware ResolveBidang yang nempelin scope bidang ke context abis JWT dicek, jadi handler tinggal baca aja. Di repo filternya pakai sqlx.In buat kategori dan IS NULL OR = buat announcements, route global sama CMS dipisah biar gampang diaudit. Repo sengaja fail-open kalau modul kosong, tapi tetap aman karena semua route admin wajib lewat gerbang dan dikunci subtest t.Run.
#go#mysql#security - 04.55backend
RBAC Dua Sumbu: Role untuk Aksi, Bidang untuk Data
Role menentukan aksi, bidang menentukan data. Catatan implementasi scope resolver fail-closed di Go: ModulesFor, ResolveBidang, dan jebakan NULL.
TL;DR: Portal lintas dinas bikin pusing karena role admin doang nggak cukup buat batasin data per bidang. Akhirnya misahin konsepnya, role buat aksi dan kolom bidang buat filter data biar nggak meledak aturan izinnya. Sistemnya dibikin fail-closed jadi kalau bidang nggak dikenal ya nggak dapet data apa pun, aman deh.
#go#mysql#security