Autentikasi & Validasi Saat PUT di API Platform
Operasi PUT digunakan untuk mengupdate resource secara penuh. Dalam API Platform, kita dapat mengatur agar hanya user tertentu yang dapat melakukan PUT, serta memvalidasi field tertentu hanya saat update.
1. Autentikasi & Akses PUT
Gunakan properti security di dalam operasi PUT untuk membatasi akses hanya kepada user yang berwenang (misalnya pemilik data atau admin):
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Put;
#[ApiResource(
operations: [
new Put(
security: "is_granted('ROLE_USER') and object.getUser() == user",
validationContext: ['groups' => ['update']]
)
]
)]
class Comment
{
// ...
}
🔐 Di atas, hanya user yang membuat Comment yang bisa melakukan update.
2. Validasi Kustom untuk PUT
Gunakan Validation Groups agar validasi hanya berlaku saat PUT:
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Serializer\Annotation\Groups;
#[Groups(['update'])]
#[Assert\Length(min: 10, groups: ['update'])]
private ?string $content = null;
3. Menghindari Update oleh User Lain
Walau security sudah diterapkan di operasi, kamu tetap bisa membuat proteksi ekstra dengan security_post_denormalize:
new Put(
securityPostDenormalize: "is_granted('ROLE_USER') and object.getUser() == user"
)
🛡️ Ini memastikan hanya owner yang bisa update — bahkan jika ada manipulasi field user dalam payload.
4. Contoh Request PUT
PUT /api/comments/10
Authorization: Bearer <jwt_token>
Content-Type: application/json
Payload:
{
"content": "Ini versi update dari komentar saya."
}
5. Response PUT
Jika sukses:
{
"@context": "/api/contexts/Comment",
"@id": "/api/comments/10",
"content": "Ini versi update dari komentar saya."
}
Jika gagal (validasi):
{
"@context": "/api/contexts/ConstraintViolationList",
"@type": "ConstraintViolationList",
"violations": [
{
"propertyPath": "content",
"message": "This value is too short. It should have 10 characters or more."
}
]
}
6. Menggunakan curl untuk PUT
curl -X PUT https://localhost/api/comments/10 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <JWT_TOKEN>" \
-d '{"content": "Updated comment content"}'
7. Tips Penting
-
Gunakan
securitydansecurity_post_denormalizebersamaan untuk keamanan maksimal. -
Jangan biarkan field
userbisa ditimpa via PUT — hindari@Groups(["put"])untuk field sensitif. -
Gunakan validation groups agar field tertentu hanya divalidasi saat
PUT.
Kesimpulan
✅ Autentikasi menggunakan security dan validasi berbasis role
✅ Validation Groups memungkinkan validasi dinamis berdasarkan operasi
✅ Proteksi PUT penting untuk mencegah perubahan data sensitif oleh user lain
🔐 Pastikan hanya pemilik yang bisa melakukan PUT, dan validasi data tetap kuat untuk menjaga integritas sistem.