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

Blog : Découverte et mémoire

Je vais à présent utiliser cette section comme mémoire perso (que je découvre, que j’observe, dont je veux me souvenir etc..)

L’idée initiale était de me développer un outil perso stockant toutes mes notes, avec une fonctionnalité « il y’a un an, deux ans, trois ans, etc ». je n’ai pas le temps de m’en occuper pour l’instant mais je vais remplir des notes via ce blog pour une potentielle utilisation future.

Je place dans une catégorie « Temps qui passe » pour pouvoir extraire facilement. Pour l’instant aussi dans la catégorie « Partage » (que j’utilise finalement très peu et probablement plus) simplement pour que ce soit à part du blog technique. C’est donc disponible publiquement, bien que personne ne le sache…

Je commence cette pratique le 23 juin 2023 mais je publierais sans doute des événements dans le passé pour placer quelques notes déjà prise ailleurs.