Cet article reprends les principes expliqués dans l'article du Jobeet Symfony du 13 décembre. Simplement cet article est un petit peu "chatty" et j'ai voulu représenter les fondamentaux de son contenu de manière plus synthétique.
Dans le dossier lib de votre application symfony (apps/<votre application>/lib), vous verrez un fichier myUser.class.php. Celui-ci est instancié lors de chaque chargement de page et vous permet d'identifier l'utilisateur actif et de gérer sa session.
Ainsi, pour ajouter et lire une variable de session dans le contrôleur :
$this->getUser()->setAttribute('myVar', 'moncontenu');
$this->getUser()->getAttribute('myVar');
Et dans la vue :
$sf_user->setAttribute('myVar', 'moncontenu');
$sf_user->getAttribute('myVar');
Jusque la, aucune difficulté. Mais cet objet va beaucoup plus loin. En effet, vous pouvez forcer quelqu'un à s'identifier pour accéder à un module particulier. Dans le fichier apps/<votre application>/config/security.yml, placez le code suivant :
default:
is_secure: on
Et pour identifier notre utilisateur automatiquement quelque soit le contrôleur, remplissons notre fichier myUser.class.php :
class myUser extends sfBasicSecurityUser {
function __construct($arg, $arg2) {
parent::__construct($arg, $arg2);
if (!$this->isAuthenticated())
$this->setAuthenticated(true);
}
}
Ici, nous identifions l'utilisateur quoi qu'il arrive. Mais bien évidemment, il en revient à vous de ne faire cela que lorsque cela est nécessaire. Dans mon cas, je vérifie l'identité de l'utilisateur avec un appel à l'API JSON de RefStats (en développement). Mais vous pouvez utiliser un modèle pour faire cela.
Pour finir, simplement identifier un utilisateur ne suffit pas toujours. Il peut arriver que vous ayez besoin de gérer divers niveaux d'identification. Symfony permet, pour cela, de gérer des "groupes", appellés credentials.
Dans votre fichier security.yml, placez :
default:
is_secure: on
credentials: admin
Seuls les utilisateurs ayant le credential admin pourront accéder à la page. Puis pour attribuer ce credential à l'utilisateur courant :
$this->getUser()->addCredential('admin');
Et vous pouvez vérifier directement dans votre application que l'utilisateur a bien le credential demandé :
$this->getUser()->hasCredential('admin');
Pour plusde détails sur tout cela, je ne peux que vous inviter à lire l'article "The User" du Jobeet. Mais celui-ci peut déjà, je l'espère, vous renseigner sur l'utilité de myUser.class.php et une des manières de l'utiliser.



Commentaires
En complément du tutoriel Jobeet et de ton article, il y a aussi toute la documentation du plugin sfGuard.
En plus, il a été porté sous Doctrine donc faut pas se priver ;)
Haan je veux une crêpe ! Sinon, tu devrais mettre un peu plus en évidence les balises <code> parce que c'est pas toujours facile à lire.
Il y a quelque chose de prévu pour gérer les héritages entre "groupes" ?
Par exemple si on a 3 groupes, A, B,C , si B et C héritent de A, ils disposent des droits de A ...
Tiens des crèpes ! :)
je vais voir ça Joris.
@stf > pour les héritages, je ne pense pas que cela soit prévu non. C'est un peu trop spécifique. Mais si tu en a besoin, tu n'a qu'à, lorsque tu initie ta session, attribuer le groupe A si la personne est dans B et C.
En placant ces groupes dans une base de données et en travaillant bien la chose, il y a moyen de faire quelque chose de très puissant.
Y'a également une partie du book qui traite la gestion des utilisateurs : http://www.symfony-project.org/book/1_2/06-Inside-the-Controller-Layer#User%20Session et aussi l'API http://www.symfony-project.org/api/1_2/user La doc de Symfony est complète et bien foutue, autant en profiter ;)
c'était juste pour savoir.
J'avais fait ca avec le ZF, mais pareil, avec un systeme manuel
PS : tu m'envoie une crèpe?(depuis le temps qu'on l'attendait !) :)
Ravi de voir qu'il y a un peu de symfony chez o2sources :)