Documentation
¶
Index ¶
- type DBBackend
- func (b *DBBackend) GetResourceInfo(method string, path string) (auth.IResourceInfo, error)
- func (b *DBBackend) GetUserAuthInfo(ctx *fiber.Ctx, validator auth.IAuthValidator) (auth.IUserAuthInfo, error)
- func (b *DBBackend) GetUserLoginInfo(ctx *fiber.Ctx, username string, password string) (auth.IUserAuthInfo, error)
- type DBLoader
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type DBBackend ¶
type DBBackend struct {
Connection port.IDatabase
Ctx context.Context
ControlType string // "RBAC" atau "ABAC" (config.Control) -- saat ini hanya RBAC yang diimplementasikan
// Cache opsional (port.ICacheMemory, bisa nil kalau "cache:memory" tidak
// dimuat -- lihat loader.go). Dipakai di findUserByUsername,
// findUserByAPIKey, dan GetResourceInfo untuk kurangi query berulang ke
// DB tiap request. GetUserLoginInfo (login) sengaja TIDAK memakai cache
// ini -- lihat komentar TTL di atas.
Cache port.ICacheMemory
}
DBBackend mengimplementasikan auth.IStore (port/auth/store.go) dengan backend PostgreSQL, sebagai pengganti adapter/authstore/yaml bawaan webcore.
Method yang wajib diimplementasikan:
- GetUserLoginInfo : dipakai saat login (POST /auth/token)
- GetUserAuthInfo : dipakai saat verifikasi token pada request terproteksi
- GetResourceInfo : dipakai untuk pengecekan RBAC (route mana butuh role apa)
func NewDBBackend ¶
func NewDBBackend(ctx context.Context, conn port.IDatabase, controlType string, cache port.ICacheMemory) *DBBackend
NewDBBackend membuat instance DBBackend baru. cache boleh nil (backend tetap berfungsi tanpa cache, cuma tanpa optimasi -- selalu query DB langsung seperti sebelumnya).
func (*DBBackend) GetResourceInfo ¶
GetResourceInfo mencari aturan akses (path+method) yang paling spesifik (prefix match terpanjang), sama seperti perilaku backend YAML.
Daftar resource per `method` di-cache (cacheTTLResource) supaya tidak query ulang ke access.auth_resources tiap request -- pencocokan prefix path tetap dilakukan di memori setiap kali (murah, cuma loop string), yang di-cache hanya hasil query DB-nya.
func (*DBBackend) GetUserAuthInfo ¶
func (b *DBBackend) GetUserAuthInfo(ctx *fiber.Ctx, validator auth.IAuthValidator) (auth.IUserAuthInfo, error)
GetUserAuthInfo dipanggil saat verifikasi token/key pada request terproteksi.
Berbeda dengan backend YAML (yang loop ke semua user in-memory lalu memanggil validator.VerifyUser satu-satu -- boleh karena datanya kecil & in-memory), backend DB ini query 1 kandidat user saja dulu (lebih murah untuk tabel besar), baru menyerahkan verifikasi akhir ke validator.VerifyUser.
Cara menentukan kandidat user berbeda tergantung tipe auth aktif (validator.Name()):
- "jwt" : userKey adalah JWT. Decode klaim "user_id" TANPA verifikasi signature dulu (hanya untuk tahu user mana yang perlu di-query), signature sesungguhnya diverifikasi oleh JWTAuthValidator.VerifyUser (pegang secret_key).
- "apikey" : userKey adalah API key mentah. Dicari di access.auth_apikey (findUserByAPIKey), lalu user pemiliknya diambil dari access.auth_users lewat user_id. `id` user TIDAK pernah dikirim ke klien -- tetap rahasia internal.
Tambah case baru di switch ini kalau menambah tipe auth lain (mis. "basic").
func (*DBBackend) GetUserLoginInfo ¶
func (b *DBBackend) GetUserLoginInfo(ctx *fiber.Ctx, username string, password string) (auth.IUserAuthInfo, error)
GetUserLoginInfo dipanggil saat proses login (username + password).
type DBLoader ¶
type DBLoader struct {
// contains filtered or unexported fields
}
DBLoader mendaftarkan backend authstorage berbasis database (PostgreSQL). Didaftarkan sebagai loader "authstorage:db" di APP_LIBRARIES (lihat webcore/auth/libraries.go), dipanggil otomatis oleh webcore/adapter/auth/authn/authn.go via:
context.StartDefaultSingletonInstance("authstorage", context, config)
yang secara internal me-resolve nama loader menjadi "authstorage:" + config.Auth.Store (lihat webcore/app/core/core.go -> getDefaultName).