Latihan 1: Role-based Access Control (RBAC) — Auth

Latihan 1 dari materi Role-based Access Control (RBAC) di Auth — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.

Lengkapi class RBAC di kode awal. Polanya sama dengan Portal Sekolah di materi, cuma nama role-nya viewer, editor, dan admin.

  1. addRole(roleName, permissions): simpan array izin milik role itu sendiri di this.roles[roleName].
  2. setHierarchy(roleName, inheritsFrom): catat bahwa roleName mewarisi semua izin inheritsFrom, di array this.hierarchy[roleName]. Pewarisan cuma satu arah.
  3. getAllPermissions(roleName): kembalikan array izin sendiri plus semua izin yang diwarisi, termasuk warisan berantai (admin mewarisi editor, editor mewarisi viewer), tanpa kembar, dan diurutkan naik dengan .sort(). Role yang gak dikenal menghasilkan [].
  4. can(roleName, permission): true kalau permission ada di hasil getAllPermissions(roleName), selain itu false.

Pendaftaran role (addRole, setHierarchy) dan enam baris console.log di bawah class sudah ada di kode awal, biarkan begitu. Output-nya harus persis enam baris ini, berurutan:

  1. true (viewer punya read)
  2. false (viewer gak punya create)
  3. true (editor mewarisi read dari viewer)
  4. true (admin mewarisi read lewat editor)
  5. true (admin punya manage_users sendiri)
  6. create,delete,manage_users,read,update

Dicek juga dengan role lain: setelah addRole("kasir", ["jual"]), addRole("bos", ["audit"]), dan setHierarchy("bos", "kasir"), hasilnya harus can("bos", "jual") = true, can("kasir", "audit") = false, dan getAllPermissions("bos") = ["audit", "jual"]. Jadi class-nya harus bekerja untuk nama role apa pun.

Hint