L'interface PermissionCheckerInterface délègue la gestion des droits d'accès au système de sécurité de votre application (Voters Symfony, ACL, etc.).
ArnaudMoncondhuy\SynapseCore\Contract\PermissionCheckerInterface
interface PermissionCheckerInterface
{
public function canView(SynapseConversation $conversation): bool;
public function canEdit(SynapseConversation $conversation): bool;
public function canDelete(SynapseConversation $conversation): bool;
public function canAccessAdmin(): bool;
public function canCreateConversation(): bool;
public function canUseAgent(SynapseAgent $agent): bool;
}
| Méthode | Rôle |
|---|---|
canView(SynapseConversation $conversation): bool |
Vérifie si l'utilisateur peut consulter le contenu d'une conversation. |
canEdit(SynapseConversation $conversation): bool |
Vérifie si l'utilisateur peut envoyer un message dans cette conversation. |
canDelete(SynapseConversation $conversation): bool |
Vérifie si l'utilisateur peut supprimer cette conversation. |
canAccessAdmin(): bool |
Vérifie les droits d'accès à l'interface d'administration /synapse/admin. |
canCreateConversation(): bool |
Vérifie si l'utilisateur peut créer une nouvelle conversation. |
canUseAgent(SynapseAgent $agent): bool |
Vérifie si l'utilisateur peut utiliser un agent spécifique. |
!!! note "Secure by Default" Par défaut, sans implémentation personnalisée, l'accès à l'administration est bloqué. C'est la posture sécurisée par défaut.
namespace App\Security;
use ArnaudMoncondhuy\SynapseCore\Contract\PermissionCheckerInterface;
use ArnaudMoncondhuy\SynapseCore\Storage\Entity\SynapseAgent;
use ArnaudMoncondhuy\SynapseCore\Storage\Entity\SynapseConversation;
use Symfony\Bundle\SecurityBundle\Security;
class AppPermissionChecker implements PermissionCheckerInterface
{
public function __construct(private Security $security) {}
public function canView(SynapseConversation $conversation): bool
{
return $this->security->isGranted('VIEW', $conversation);
}
public function canEdit(SynapseConversation $conversation): bool
{
return $this->security->isGranted('EDIT', $conversation);
}
public function canDelete(SynapseConversation $conversation): bool
{
return $this->security->isGranted('ROLE_ADMIN');
}
public function canAccessAdmin(): bool
{
return $this->security->isGranted('ROLE_ADMIN');
}
public function canCreateConversation(): bool
{
return $this->security->getUser() !== null;
}
public function canUseAgent(SynapseAgent $agent): bool
{
$accessControl = $agent->getAccessControl();
if ($accessControl === null) {
return true; // Agent public
}
$user = $this->security->getUser();
if ($user === null) {
return false;
}
foreach ($accessControl['roles'] ?? [] as $role) {
if ($this->security->isGranted($role)) {
return true;
}
}
return in_array(
$user->getUserIdentifier(),
$accessControl['userIdentifiers'] ?? [],
true
);
}
}
Puis enregistrez dans services.yaml :
services:
ArnaudMoncondhuy\SynapseCore\Contract\PermissionCheckerInterface:
class: App\Security\AppPermissionChecker
How can I help you explore Laravel packages today?