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
security
dansecurity_post_denormalize
bersamaan untuk keamanan maksimal. -
Jangan biarkan field
user
bisa 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.