-
-
Notifications
You must be signed in to change notification settings - Fork 201
/
User.php
123 lines (110 loc) · 3.28 KB
/
User.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php
declare(strict_types=1);
namespace App\Entity;
use ApiPlatform\Metadata\ApiProperty;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use App\Repository\UserRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\IdGenerator\UuidGenerator;
use Symfony\Bridge\Doctrine\Types\UuidType;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
use Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer;
use Symfony\Component\Uid\Uuid;
/**
* A person (alive, dead, undead, or fictional).
*
* @see https://schema.org/Person
*/
#[ApiResource(
types: ['https://schema.org/Person'],
operations: [
new GetCollection(
uriTemplate: '/admin/users{._format}',
itemUriTemplate: '/admin/users/{id}{._format}',
security: 'is_granted("OIDC_ADMIN")',
filters: ['app.filter.user.admin.name'],
paginationClientItemsPerPage: true
),
new Get(
uriTemplate: '/admin/users/{id}{._format}',
security: 'is_granted("OIDC_ADMIN")'
),
new Get(
uriTemplate: '/users/{id}{._format}',
security: 'object === user'
),
],
normalizationContext: [
AbstractNormalizer::GROUPS => ['User:read'],
AbstractObjectNormalizer::SKIP_NULL_VALUES => true,
]
)]
#[ORM\Entity(repositoryClass: UserRepository::class)]
#[ORM\Table(name: '`user`')]
#[UniqueEntity('email')]
class User implements UserInterface
{
/**
* @see https://schema.org/identifier
*/
#[ApiProperty(types: ['https://schema.org/identifier'])]
#[ORM\Column(type: UuidType::NAME, unique: true)]
#[ORM\CustomIdGenerator(class: UuidGenerator::class)]
#[ORM\GeneratedValue(strategy: 'CUSTOM')]
#[ORM\Id]
private ?Uuid $id = null;
/**
* @see https://schema.org/email
*/
#[ORM\Column(unique: true)]
public ?string $email = null;
/**
* @see https://schema.org/givenName
*/
#[ApiProperty(types: ['https://schema.org/givenName'])]
#[Groups(groups: ['User:read', 'Review:read'])]
#[ORM\Column]
public ?string $firstName = null;
/**
* @see https://schema.org/familyName
*/
#[ApiProperty(types: ['https://schema.org/familyName'])]
#[Groups(groups: ['User:read', 'Review:read'])]
#[ORM\Column]
public ?string $lastName = null;
public function getId(): ?Uuid
{
return $this->id;
}
public function eraseCredentials(): void
{
}
/**
* @return array<int, string>
*/
public function getRoles(): array
{
return ['ROLE_USER'];
}
public function getUserIdentifier(): string
{
return (string) $this->email;
}
/**
* @see https://schema.org/name
*/
#[ApiProperty(iris: ['https://schema.org/name'])]
#[Groups(groups: ['User:read', 'Review:read'])]
public function getName(): ?string
{
if (!$this->firstName && !$this->lastName) {
return null;
}
return trim(\sprintf('%s %s', $this->firstName, $this->lastName));
}
}