Archives de l’auteur : Numa

Symfony : connaître tous les rôles d’un utilisateur (selon la hiérarchie configuré)

Exemple rapide

namespace App\Security\Voter;

use App\Entity\User;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Role\RoleHierarchyInterface;

class UserVoter extends Voter
{

    public const EDIT = 'USER_EDIT';

    public function __construct(private RoleHierarchyInterface $roleHierarchy) {
    }

    protected function supports(string $attribute, $subject): bool
    {
        return \in_array($attribute, [self::EDIT, self::TRANSFER, self::DELETE, self::SEE_NDE]) && $subject instanceof User;
    }

    protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
    {
        /** @var User $user */
        $user = $token->getUser();
        //
        $subjectRoles = $this->roleHierarchy->getReachableRoleNames($subject->getRoles());
        $userRoles = $this->roleHierarchy->getReachableRoleNames($user->getRoles());
        //je ne peux pas modifier un utilisateur ayant plus de rôles que moi
        if(count($subjectRoles) > count($userRoles)) {
            return false;
        }
        return true;
    }
}

Symfony : Se débarrasser de « sensio/framework-extra-bundle »

Note rapide

remplacer les

use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;

par

use Symfony\Component\Security\Http\Attribute\IsGranted;

et l’utilisation

* @IsGranted("editProject", subject="entity")

par

#[IsGranted('editProject', 'entity')]

remplacer les

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Entity;

par

use Symfony\Bridge\Doctrine\Attribute\MapEntity;

et l’utilisation

/**
* @Entity("project", expr="repository.findDetails(id)")
*/

public function emptyElements(Project $entity)

par

public function emptyElements(
        #[MapEntity(disabled: true, expr: 'repository.findDetails(id)')]
       Project $entity
        )

pour les paramConverter, ce cas peut etre supprimé directement

* @ParamConverter("day", options={"format": "Y-m-d"})

Une fois tous les élements de ce type supprimé/remplacer on peux supprimer le sensio/framework-extra-bundle du fichier composer.json et mettre à jour

Observation : Chenille du Sphinx de l’euphorbe

Ce 12 juillet 2023 dans le jardin une grosse chenille (j’ai mesurer 8cm !) au couleurs criarde (rouge, blanche et noire) m’interpelle. Après quelques recherche j’en déduit qu’il s’agit de la chenille du Sphinx de l’euphorbe et j’apprends par la même occasion que la plante qu’elle est en train de grignoter et donc l’Euphorbe.
Chenille du Sphinx de l'euphorbe