'\d+'],
normalizationContext: ['groups' => ['carrier:read']],
+ security: "is_granted('ROLE_USER')"
),
new GetCollection(
normalizationContext: ['groups' => ['carrier:read']],
+ security: "is_granted('ROLE_USER')"
),
new Post(
normalizationContext: ['groups' => ['carrier:read']],
diff --git a/src/Entity/Supplier.php b/src/Entity/Supplier.php
index 5e467cd..6ed64da 100644
--- a/src/Entity/Supplier.php
+++ b/src/Entity/Supplier.php
@@ -22,14 +22,11 @@ use Symfony\Component\Serializer\Attribute\Groups;
new Get(
requirements: ['id' => '\d+'],
normalizationContext: ['groups' => ['supplier:read']],
+ security: "is_granted('ROLE_USER')"
),
new GetCollection(
normalizationContext: ['groups' => ['supplier:read']],
- ),
- new GetCollection(
- uriTemplate: '/admin/suppliers',
- normalizationContext: ['groups' => ['supplier:read']],
- security: "is_granted('ROLE_ADMIN')"
+ security: "is_granted('ROLE_USER')"
),
new Post(
normalizationContext: ['groups' => ['supplier:read']],
diff --git a/src/State/UserPasswordProcessor.php b/src/State/UserPasswordProcessor.php
index 8bbd8fb..d5ab715 100644
--- a/src/State/UserPasswordProcessor.php
+++ b/src/State/UserPasswordProcessor.php
@@ -21,8 +21,12 @@ final class UserPasswordProcessor implements ProcessorInterface
public function process(mixed $data, Operation $operation, array $uriVariables = [], array $context = []): mixed
{
if ($data instanceof User) {
- $plain = $data->getPassword();
- if ('' !== $plain) {
+ $plain = $data->getPassword();
+ $previous = $context['previous_data'] ?? null;
+ if ($previous instanceof User && $plain === $previous->getPassword()) {
+ // Password not changed in payload: keep existing hash.
+ $data->setPassword($previous->getPassword());
+ } elseif ('' !== $plain) {
$data->setPassword($this->hasher->hashPassword(
$data,
$plain