Subdomain.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Entity\Organization;
  4. use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
  5. use ApiPlatform\Metadata\ApiFilter;
  6. use ApiPlatform\Metadata\ApiResource;
  7. use ApiPlatform\Metadata\Get;
  8. use ApiPlatform\Metadata\GetCollection;
  9. use ApiPlatform\Metadata\Post;
  10. use ApiPlatform\Metadata\Put;
  11. use App\Attribute\OrganizationDefaultValue;
  12. use App\Repository\Organization\SubdomainRepository;
  13. use App\State\Processor\Organization\SubdomainProcessor;
  14. use DH\Auditor\Provider\Doctrine\Auditing\Annotation\Auditable;
  15. use Doctrine\ORM\Mapping as ORM;
  16. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  17. use Symfony\Component\Serializer\Annotation\Groups;
  18. use Symfony\Component\Validator\Constraints as Assert;
  19. /**
  20. * Sous-domaine enregistré par une organisation.
  21. *
  22. * Security:
  23. *
  24. * @see \App\Doctrine\Organization\CurrentOrganizationSubdomainExtension
  25. */
  26. #[ApiResource(
  27. operations: [
  28. new Get(
  29. security: 'is_granted("ROLE_ORGANIZATION_VIEW") and object.getOrganization().getId() == user.getOrganization().getId()'
  30. ),
  31. new Put(
  32. security: 'is_granted("ROLE_ORGANIZATION") and object.getOrganization().getId() == user.getOrganization().getId()'
  33. ),
  34. new GetCollection(
  35. security: 'is_granted("ROLE_ORGANIZATION_VIEW")'
  36. ),
  37. new Post(
  38. security: 'is_granted("ROLE_ORGANIZATION")'
  39. ),
  40. ],
  41. processor: SubdomainProcessor::class
  42. )]
  43. #[Auditable]
  44. #[ORM\Entity(repositoryClass: SubdomainRepository::class)]
  45. #[OrganizationDefaultValue(fieldName: 'organization')]
  46. #[UniqueEntity('subdomain')]
  47. #[ApiFilter(filterClass: SearchFilter::class, properties: ['subdomain' => 'exact'])]
  48. class Subdomain
  49. {
  50. #[ORM\Id]
  51. #[ORM\Column]
  52. #[ORM\GeneratedValue]
  53. private ?int $id = null;
  54. #[ORM\ManyToOne(inversedBy: 'subdomains')]
  55. private Organization $organization;
  56. #[ORM\Column(type: 'string', length: 60, unique: true, nullable: false)]
  57. #[Groups('subdomain')]
  58. #[Assert\Regex('/^[\\w\\-]+$/', 'Subdomains can not contains whitespaces or special characters')]
  59. private string $subdomain;
  60. #[ORM\Column(options: ['default' => false])]
  61. #[Groups('subdomain')]
  62. private bool $active = false;
  63. public function getId(): ?int
  64. {
  65. return $this->id;
  66. }
  67. public function setId(?int $id): void
  68. {
  69. $this->id = $id;
  70. }
  71. public function getOrganization(): Organization
  72. {
  73. return $this->organization;
  74. }
  75. public function setOrganization(Organization $organization): void
  76. {
  77. $this->organization = $organization;
  78. }
  79. public function getSubdomain(): string
  80. {
  81. return $this->subdomain;
  82. }
  83. public function setSubdomain(string $subdomain): void
  84. {
  85. $this->subdomain = $subdomain;
  86. }
  87. public function isActive(): bool
  88. {
  89. return $this->active;
  90. }
  91. public function setActive(bool $active): void
  92. {
  93. $this->active = $active;
  94. }
  95. }