Access Control & Capability Model¶
SSOT ringkas untuk relasi role, capability, navigation, feature flag, dan platform tier di frontend Scola.
Last verified: 2026-03-17
1. Prinsip Dasar¶
- Otoritas final tetap ada di backend: ACL, record rule, dan entitlement domain.
- Guard frontend berfungsi untuk UX, fail-closed navigation, dan mencegah fitur bocor antar role atau antar tier.
- Tier package tidak boleh ditentukan hanya dari menu; harus konsisten di auth payload, feature flags, route guard, dan backend entitlement.
2. Lapisan Source of Truth¶
| Lapisan | Fungsi | File utama |
|---|---|---|
| Auth payload | Menentukan role aktif, daftar role, permission list, platform_tier, dan entitlement tenant |
src/stores/auth.store.js |
| Capability registry | Mendefinisikan kemampuan per role dan fallback capability FE | src/config/roleCapabilities.js |
| Menu registry | Menentukan informasi arsitektur menu per role | src/config/menuRegistry.js |
| Navigation policy | Menentukan bottom bar, launcher, dan quick access | src/config/menuNavigationPolicy.js |
| Route guard | Menegakkan auth, role scope, capability, feature flag, dan minimum tier | src/router/index.js |
| Feature flag + tiering | Menentukan modul premium dan minimum package | src/config/featureFlags.js, src/config/platformTiers.js |
3. Aturan Implementasi¶
Saat menambah route atau menu baru:
1. Tambahkan capability yang jelas, jangan hanya mengandalkan role string.
2. Jika fitur termasuk modul premium, beri featureFlag eksplisit atau pastikan capability/route dapat diinfer oleh platformTiers.
3. Pastikan route ada di menuRegistry jika memang user-facing.
4. Pastikan menuNavigationPolicy tidak menunjuk route yang tidak ada.
5. Tambahkan test guard jika perubahan menyentuh boundary role, feature flag, atau package tier.
Kontrak auth payload FE yang sekarang didukung:
- platform_tier bisa datang dari top-level payload, entitlements, tier_entitlements, atau subscription.plan.
- entitlement feature flags bisa datang sebagai map (feature_flags, module_flags, flags) atau allowlist/blocklist (enabled_features, allowed_features, disabled_features, blocked_features).
- FE me-reset runtime feature flags setiap pergantian sesi/login agar tidak ada leak antar tenant atau antar role switch flow.
4. Boundary yang Sudah Aktif di FE¶
Boundary yang saat ini sudah dijaga di FE: - role-scoped route guard untuk student dan parent portal - feature flag guard untuk modul seperti CBT - platform tier guard untuk LMS, CBT, inventory, accounting, library, RFID, dan face recognition - menu filtering berdasarkan capability, feature flag, dan minimum tier
Catatan: - FE guard ini penting, tetapi tidak menggantikan backend security. - Jika FE dan BE berbeda hasil, backend harus dianggap sumber kebenaran terakhir.
5. Referensi Verifikasi¶
- Smoke & E2E: docs/qa/e2e-tests.md
- QA gate: docs/qa/qa-gates.md
- Packaging tier: docs/architecture/platform-tiers.md