Przeglądaj źródła

Ajout du fichier params yaml pour la config d'ApiResource & groups

Vincent GUFFON 4 lat temu
rodzic
commit
0eb4990a0d
2 zmienionych plików z 44 dodań i 23 usunięć
  1. 36 0
      config/api_platform/Access/access.yaml
  2. 8 23
      src/Entity/Access/Access.php

+ 36 - 0
config/api_platform/Access/access.yaml

@@ -0,0 +1,36 @@
+App\Entity\Access\Access:
+  collectionOperations:
+    get: ~
+
+    cget_students:
+      method: GET
+      path: '/students'
+      security: 'is_granted("ROLE_USERS_VIEW")'
+
+    cget_admin:
+      method: GET
+      path: '/admin'
+
+    cget_access_person_ref:
+      method: GET
+      path: '/access_people'
+      normalization_context:
+        groups: ['access_people_ref']
+
+  itemOperations:
+    get:
+      security: '(is_granted("ROLE_USERS_VIEW") and object.getOrganization().getId() == user.getOrganization().getId()) or (object.getId() == user.getId())'
+
+    get_access_address:
+      method: GET
+      path: '/access_addresses/{id}'
+      requirements:
+        id : '\d+'
+      normalization_context:
+        groups: ['access_address', 'address']]
+      security: 'object.getOrganization().getId() == user.getOrganization().getId()'
+
+    put:
+      security: 'is_granted("ROLE_USERS") or (object.getId() == user.getId())'
+
+    delete: ~

+ 8 - 23
src/Entity/Access/Access.php

@@ -3,6 +3,9 @@ declare(strict_types=1);
 
 namespace App\Entity\Access;
 
+use ApiPlatform\Core\Annotation\ApiFilter;
+use App\Filter\Person\FullNameFilter;
+use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\BooleanFilter;
 use ApiPlatform\Core\Annotation\ApiResource;
 use ApiPlatform\Core\Annotation\ApiSubresource;
 use App\Entity\Billing\AccessIntangible;
@@ -23,36 +26,17 @@ use Symfony\Component\Serializer\Annotation\Groups;
 
 /**
  * Fais le lien entre une Person et une Organization
+ * @ApiResource @see : config/api_platform/Access/access.yaml
  */
-#[ApiResource(
-    collectionOperations:[
-        'cget_students'=> [
-            'method' => 'GET',
-            'path' => '/students',
-            'security' => 'is_granted("ROLE_USERS_VIEW")'
-        ],
-        'cget_admin'=> [
-            'method' => 'GET',
-            'path' => '/admin'
-        ],
-        'get'
-    ],
-    itemOperations: [
-        'get' => [
-            'security' => '(is_granted("ROLE_USERS_VIEW") and object.getOrganization().getId() == user.getOrganization().getId()) or (object.getId() == user.getId())'
-        ],
-        'put' => [
-            'security' => 'is_granted("ROLE_USERS") or (object.getId() == user.getId())'
-        ],
-        'delete'
-    ]
-)]
 #[ORM\Entity(repositoryClass: AccessRepository::class)]
+#[ApiFilter(BooleanFilter::class, properties: ['person.isPhysical'])]
+#[ApiFilter(FullNameFilter::class)]
 class Access implements UserInterface
 {
     #[ORM\Id]
     #[ORM\Column]
     #[ORM\GeneratedValue]
+    #[Groups("access_people_ref")]
     private ?int $id = null;
 
     #[ORM\Column(options: ['default' => false])]
@@ -68,6 +52,7 @@ class Access implements UserInterface
 
     #[ORM\ManyToOne(cascade: ['persist'])]
     #[ORM\JoinColumn(nullable: false)]
+    #[Groups(["access_people_ref", "access_address"])]
     private Person $person;
 
     #[ORM\ManyToOne]