EDIT[] : problème résolu. En fait à la méthode isGranted() il faut lui donner "EDIT" en lettres majuscules ! Or comme dans la doc sf2 on a des $builder->add('edit') je pensais qu'il fallait mettre en minuscules, mais non !

Bonjour.

Je viens vous voir car j'ai un problème dans l'utilisation des ACLs.

Pour mes tests j'ai deux méthodes :
- addAction qui a pour but d'ajouter un article en bdd (à la main donc, juste pour tester)
- editAction qui a pour but d'afficher si oui ou non l'utilisateur a le droit de modifier ledit article

Voici mes codes :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
        $article = new Article();
        $article->setTitle('Just a test')->setContent('Here the content !');
        $u = $this->get('security.context')->getToken()->getUser();
        $article->setAuthor($u);
 
        $em = $this->getDoctrine()->getManager();
        $em->persist($article);
        $em->flush();
 
        // ACL
        $aclProvider = $this->get('security.acl.provider');
        $objectIdentity = ObjectIdentity::fromDomainObject($article);
        $acl = $aclProvider->createAcl($objectIdentity);
 
        $identity = UserSecurityIdentity::fromAccount($u);
 
        $builder = new MaskBuilder();
        $builder->add('edit')->add('delete');
 
        $acl->insertObjectAce($identity, $builder->get());
        $aclProvider->updateAcl($acl);
Je ne fais rien de spécial : j'ajoute un article puis je définie les ACLs pour l'utilisateur $u (qui est évidemment connecté). Pour le moment pas de problème. Voici le code de la méthode editAction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
        $em = $this->getDoctrine()->getManager();
        $repo = $em->getRepository('MorganHomeBundle:Article');
 
        $article = $repo->find(1);
 
        if($this->get('security.context')->isGranted('edit', $article)) {
            echo 'if';
        }
        else {
            echo 'else';
        }
 
        die;
Ce code m'affiche toujours "else" sauf si j'écris isGranted('EDIT', $article). Mais le but du mask de addAction n'est pas justement de se servir des droits ajoutés (edit et delete en l’occurrence) ?

Merci d'avance pour votre aide.