Latihan 1: Policies & Authorization — Laravel

Latihan 1 dari materi Policies & Authorization di Laravel — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.

Latihan ini menulis policy Laravel sungguhan untuk post blog, dengan pola yang sama seperti ReviewPolicy. Kode awal sudah punya class User dan Post sederhana, PostPolicy dengan before, update dan delete yang masih berupa kerangka, Gate::policy(Post::class, PostPolicy::class), function cek(...) yang bertanya ke Gate::forUser($user)->allows(...), dan baris-baris echo di bawahnya. Biarkan semuanya kecuali isi ketiga method itu.

  1. before(User $user, string $ability): ?bool: kalau $user->is_super_admin, kembalikan true. Selain itu kembalikan null, artinya lanjut ke method aksinya.
  2. update(User $user, Post $post): bool: true kalau $user->id === $post->user_id (pemiliknya) atau $user->role === "admin". Selain itu false.
  3. delete(User $user, Post $post): bool: aturan yang sama dengan update.

Output-nya harus seperti ini:

update pemilik: boleh
update user lain: ditolak
update admin: boleh
delete user lain: ditolak
delete super admin: boleh
delete pemilik: boleh
authorize user lain: This action is unauthorized.

Baris terakhir datang dari Gate::forUser($otherUser)->authorize("update", $post), yang melempar AuthorizationException dengan pesan Laravel sendiri.

Yang diperiksa: ketujuh baris itu, method before( di kodemu, dan user lain yang dicoba penilai: pemilik lain boleh update, bukan pemilik ditolak di delete, super admin boleh update, dan admin boleh delete.

Hint