Aller au contenu

PermissionCheckerInterface

L'interface PermissionCheckerInterface permet de déléguer la logique de sécurité de Synapse Core à votre système de droits existant (Voters Symfony, ACL, etc.).

🛠 Pourquoi l'utiliser ?

  • Intégration native : Utilisez vos rôles (ROLE_ADMIN, ROLE_USER) pour contrôler l'accès aux fils de discussion.
  • Isolation : Garantir qu'un utilisateur ne puisse ni voir ni modifier les conversations des autres.
  • Multi-niveaux : Distinguer le droit de lecture, d'édition et de suppression.

📋 Résumé du Contrat

Méthode Cible Rôle
canView($conversation) Conversation Autorise ou non la lecture.
canEdit($conversation) Conversation Autorise ou non l'envoi de messages.
canDelete($conversation) Conversation Autorise ou non la suppression/archivage.
canAccessAdmin() - Vérifie l'accès à /synapse/admin.
canCreateConversation() - Autorise la création d'un nouveau chat.

🚀 Exemple : Implémentation via Symfony Security

namespace App\Synapse\Security;

use ArnaudMoncondhuy\SynapseCore\Contract\PermissionCheckerInterface;
use Symfony\Bundle\SecurityBundle\Security;

class SynapseVoterChecker implements PermissionCheckerInterface
{
    public function __construct(private Security $security) {}

    public function canView($conversation): bool
    {
        return $this->security->isGranted('VIEW', $conversation);
    }

    public function canEdit($conversation): bool
    {
        return $this->security->isGranted('EDIT', $conversation);
    }

    public function canDelete($conversation): bool
    {
        // Seuls les admins peuvent supprimer
        return $this->security->isGranted('ROLE_ADMIN');
    }

    public function canAccessAdmin(): bool
    {
        return $this->security->isGranted('ROLE_ADMIN');
    }

    public function canCreateConversation(): bool
    {
        // Tout utilisateur connecté peut créer un chat
        return $this->security->getUser() !== null;
    }
}

💡 Conseils d'implémentation

  • Délégation : Si vous ne souhaitez pas gérer de permissions complexes, vous pouvez laisser le bundle utiliser DefaultPermissionChecker. Notez que par défaut, l'accès à l'administration est bloqué si aucun système de sécurité n'est configuré (posture "Secure by Default").
  • Performance : Ces méthodes sont appelées à chaque accès aux messages ou au dashboard. Veillez à ce qu'elles ne fassent pas de requêtes SQL lourdes.