Django-fr

Forum

#1 02-08-2017 14:27:35

Sk34Zz
Membre
Inscription : 02-08-2017
Messages : 1

Permission d'accès à une page

Bonjour,

je me suis mis récemment à Django, et je suis entrain de construire mon petit "blog".

J'ai implémenté les différentes fonction CRUD (Create, Read, Update, Delete), et j'ai remarqué un problème de sécurité:

J'ai mis en place des condition "IF" dans mes templates pour cacher l'accés aux boutons "Edit" et "Delete" quand un autre utilisateur accède à mes articles. Cependant, si celui-ci entre l'url manuellement, il aura accès à ces fonctions !

J'ai déjà protégé ces fonctions contre les personnes non connectées avec "@login_required" dans mon fichier "views.py", mais je ne trouve rien pour que seulement la personne qui a créé l'article puisse le modifier/supprimer.

Mes articles possèdent tous une PrimaryKey, que je peux comparer a l'utilisateur qui visite actuellement la page si jamais cela peut aider ! smile


merci d'avance !

Hors ligne

#2 12-12-2017 16:02:28

GrandGTO
Membre
Inscription : 14-03-2016
Messages : 3

Re : Permission d'accès à une page

Bonjour,

Il y a plusieurs solutions à ton problème, en voici une.
Pourquoi ne pas créer un modèle "Profile" et le lier au modèle "User" (OneToOneField).
Dans ce modèle "Profile", tu indiques un champs "Permission" (ForeignKey) qui renvoie vers un modèle "Permission"

Ce modèle "Permission" pourrait lister l'ensemble des droits possibles comme rédacteur, modérateur, administrateur, etc.
Tu as juste ensuite à te baser sur "Profile.permission" pour émettre ta condition dans ta vue au niveau de ton traitement.

Par exemple si tu as peur que quelqu'un n'ayant pas les droits requis exécute un formulaire tu peux faire juste avant form.save() :

if request.user.profile.permission.id == 2: (ou 1, 3, peut importe)
     form.save()
else:
    messages.add_message(request, messages.INFO, 'Vous ne pouvez pas accéder à cette page : Accès refusé')
    return.redirect(myview)

Hors ligne

Pied de page des forums