Julien Fastré af663cf27c
Create the helper ChillSecurity
En symfony 5.4 le typage a été vraiment amélioré, et phpstan peut détecter plus d'erreur potentielles.

Mais le problème est que Symfony "type" les `User` avec son propre `Symfony\Component\Security\Core\User\UserInterface` alors qu'on a besoin de `Chill\MainBundle\Entity\User`.

Imaginons qu'on a ceci:

```php

namespace Chill\Bundle\Service;

final readonly class SomeService
{
    public function myMethod(\Chill\MainBundle\Entity\User $user): void
    {
        // ...
    }
}
```

Quand on l'appelle dans un contrôleur ou dans un service:

```php

namespace Chill\Bundle\Service;

use Symfony\Component\Security\Core\Security;

final readonly OtherService
{
    public function __construct(private Security $security, private SomeService $service) {}

    public function __invoke(): void
    {
        $this->service->myMethod($this->security->getUser());
    }
}
```

PHPstan va se plaindre:

```
Parameter #1 $user of method SomeService::myMethod() expects Chill\MainBundle\Entity\User, Symfony\Component\Security\Core\User\UserInterface|null given.
```

Du coup, j'ai créé ce service:

```php
<?php

namespace Chill\MainBundle\Security;

use Chill\MainBundle\Entity\User;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
use Symfony\Component\Security\Core\Security;

/**
 * Security helper for Chill user
 *
 * Provides security-related functionality such as user retrieval, authorization checks,
 * and token retrieval, in a context where only an authenticated @see{User::class} is expected.
 *
 */
final readonly class ChillSecurity implements AuthorizationCheckerInterface
{

    public function hasUser(): bool
    {
        // implementation detail not shown here
    }

    public function getUser(): User
    {
        // implementation detail not shown here
    }

    public function isGranted($attribute, $subject = null): bool
    {
        // implementation detail not shown here
    }

    public function getToken(): ?TokenInterface
    {
        // implementation detail not shown here
    }
}
```

Et maintenant, on peut faire:

```php

namespace Chill\Bundle\Service;

use Chill\MainBundle\Security\ChillSecurity;

final readonly OtherService
{
    public function __construct(private ChillSecurity $security, private SomeService $service) {}

    public function __invoke(): void
    {
        $this->service->myMethod($this->security->getUser());
    }
}
```

Et tout va bien se passer.

Ca sera dans la version de chill qui fait passer à symfony 5.4.
2023-12-12 22:43:24 +01:00
..
2023-10-17 13:27:03 +02:00
2023-11-16 15:12:12 +00:00
2023-10-17 13:27:03 +02:00
2023-10-17 13:27:03 +02:00
2023-10-17 13:27:03 +02:00
2023-11-29 22:22:06 +01:00
2023-11-16 15:12:12 +00:00
2023-10-17 13:27:03 +02:00
2023-10-17 13:27:03 +02:00
2023-11-16 15:12:12 +00:00
2023-11-16 15:12:12 +00:00
2023-10-17 13:27:03 +02:00
2023-12-12 22:43:24 +01:00
2023-11-16 15:12:12 +00:00
2023-10-17 13:27:03 +02:00
2023-11-16 15:12:12 +00:00
2023-10-17 13:27:03 +02:00
2023-11-16 15:12:12 +00:00
2023-10-17 13:27:03 +02:00
2023-10-17 13:27:03 +02:00
2023-10-17 13:27:03 +02:00
2022-02-28 15:01:26 +01:00

ChillMain

An app for social-profit organisations

Documentation & installation

Read documentation here : http://chill.readthedocs.org