Bien débuter avec le Framework Silex – Gestion des permissions des utilisateurs

19 décembre 2017 - : 1 commentaire.s

Bien débuter avec le Framework Silex – Gestion des permissions des utilisateurs

Dans ce 7ème et dernier article, nous allons voir comment gérer les permissions des utilisateurs sur notre site.

Les règles que nous mettrons en place seront les suivantes :

  • Un membre peut commenter les articles
  • Un membre peut modifier son propre article
  • Un membre ou un administrateur peut ajouter un article
  • Un administrateur peut modifier ou supprimer tous les articles

Pour commencer, nous allons ajouter le formulaire de connexion dans la sidebar, ce formulaire sera remplacé par un message de bienvenue si l’utilisateur a une session ouverte.

Afin de pouvoir utiliser notre formulaire de connexion comme bon nous semble, nous allons le séparer dans un fichier partiel.

Créons donc le fichier templates/partials/login_form.html.twig

<form action="{{path('login_check')}}" method="POST">
	<div class="form-group">
	    <label for="pseudo">Pseudo : </label><input type="text" id="pseudo" class="form-control" name="pseudo">
	    <label for="password">Mot de passe : </label><input type="password" id="password" class="form-control" name="password">
	    <button type="submit" class="btn btn-default">Valider</button>
	</div>
</form>
<p>Pas encore inscrit ? <a href="{{ path('inscription') }}">Inscrivez-vous</a></p>
Langage : HTML/Twig - Fichier templates/partials/login_form.html.twig

Ce fichier pourra maintenant être appelé depuis d’autres vues.

Nous allons l’inclure dans la sidebar si, et seulement si, l’utilisateur n’a pas de session en cours.

<aside class="col-3">
	<!-- Si une session utilisateur existe -->
 	{% if user %}
		<!-- On affiche un message de bienvenue -->
	 	<h3>Bienvenue {{ user.pseudo }}</h3>
		<p><a href="{{ path('logout') }}">Me déconnecter</a></p>
	<!-- Sinon -->
	{% else %}
 		<h3>Connexion</h3>
		<!-- On affiche le formulaire de connexion -->
		{% include 'partials/login_form.html.twig' %}
	{% endif %}
</aside>
    
Langage : HTML/Twig - Fichier templates/partials/sidebar.html.twig

Bien sûr, à partir de maintenant, il sera nécessaire de passer les informations de session à toutes les vues qui feront appel à la sidebar.

Par exemple

$app->get('/blog', function () use ($app){
    $articleModel = new articleModels();
    $articles = $articleModel->getArticles($app);
    return $app['twig']->render('blog.html.twig', array('articles'=> $articles, 'user' => $app['session']->get('user')));
})
->bind('monblog')
;
Langage : PHP - Fichier src/articlesControllers.php

Afin de gérer l’affichage ou non des options d’ajout, modification ou suppression d’articles, que nous allons mettre dans la sidebar (ce n’est qu’un exemple), nous devrons vérifier le rôle de l’utilisateur.

<aside class="col-3">
 	{% if user %}
	 	<h3>Bienvenue {{ user.pseudo }}</h3>
		<p><a href="{{ path('logout') }}">Me déconnecter</a></p>
		<!-- Tout utilisateur connecté peut ajouter un article -->
		<p><a href="{{path('ajout_article')}}">Ajouter un article</a></p>
		<!-- Si un article est affiché -->
		{% if article is defined %}
			<!-- Si l'utilisateur est administrateur ou l'auteur de l'article -->
			{% if (user.role == 'admin') or (article.utilisateurs_userid == user.userid) %}
				<p><a href="{{path('modif', {'id': article.id})}}">Modifier l'article</a></p>
			{% endif %}
			<!-- Si l'utilisateur est administrateur -->
			{% if user.role == 'admin' %}
				<p><a href="{{path('suppr', {'id': article.id})}}">Supprimer l'article</a></p>
			{% endif %}
		{% endif %}
	{% else %}
 		<h3>Connexion</h3>
		{% include 'partials/login_form.html.twig' %}
	{% endif %}
</aside>
Langage : HTML/Twig - Fichier templates/partials/sidebar.html.twig

Bien sûr, cette gestion des permissions peut également se faire dans d’autres fichiers.

Pour terminer ce tutoriel, nous allons ajouter un formulaire d’ajout de commentaires pour les utilisateurs connectés.

Ceci se passera dans le fichier templates/article.html.twig

{% extends "layout.html.twig" %}

{% block content %}
	<section class="row">
		<div class="col-9">
			<article class="row">
				<div class="col-12">
					<h2>{{ article.titre }}</h2>
					<p>Publié le {{ article.date_article|date('d/m/Y') }} par {{ article.pseudo }}</p>
					<p>{{ article.contenu }}</p>
				</div>
			</article>
			<section class="row">
				<div class="col-12">
					<h3>Voici les commentaires</h3>
					{% for comment in comments %}
						<p>{{comment.pseudo}} a écrit : {{comment.contenu}}</p>
					{% else %}
						<p>Pas de commentaires</p>
					{% endfor %}
				</div>
			</section>
			<section class="row">
				<div class="col-12">
					<h3>Ajouter un commentaire</h3>
					<!-- Si l'utilisateur est connecté -->
				 	{% if user %}
						{% include 'partials/comment_form.html.twig' %}
					<!-- Sinon -->
					{% else %}
				 		<p>Vous devez vous connecter pour ajouter un commentaire</p>
					{% endif %}
				</div>
			</section>
		</div>
		{% include 'partials/sidebar.html.twig' %}
	</section>
	<p><a href="{{ path('monblog') }}">Liste des articles</a></p>
{% endblock %}
Langage : HTML/Twig - Fichier templates/article.html.twig

Vous avez remarqué que le formulaire n’est pas directement présent ici. Nous avons un fichier partiel qui le contient

<form action="{{path('ajout_comment')}}" method="POST">
	<div class="form-group">
		<input type="hidden" name="userid" value="{{user.userid}}">
		<input type="hidden" name="articleid" value="{{article.id}}">
	    <label for="contenu">Votre commentaire : </label><textarea id="contenu" class="form-control" name="contenu"></textarea>
	    <button type="submit" class="btn btn-default">Valider</button>
	</div>
</form>
Langage : HTML/Twig - Fichier templates/partials/comment_form.html.twig

Voici que se termine cette série d’articles permettant d’apprendre pas à pas l’utilisation de Silex.

Commentaires

Jervin

Merci

Le 07 mars 2018

Laisser un commentaire