mirror of
https://github.com/ae-utbm/sith.git
synced 2025-11-10 14:03:12 +00:00
remove remaining CanCreateMixin
This commit is contained in:
@@ -212,7 +212,7 @@ Pour les vues sous forme de fonction, il y a le décorateur
|
||||
obj = self.get_object()
|
||||
obj.is_moderated = True
|
||||
obj.save()
|
||||
return redirect(reverse("com:news_list"))
|
||||
return redirect("com:news_list")
|
||||
```
|
||||
|
||||
=== "Function-based view"
|
||||
@@ -233,7 +233,7 @@ Pour les vues sous forme de fonction, il y a le décorateur
|
||||
news = get_object_or_404(News, id=news_id)
|
||||
news.is_moderated = True
|
||||
news.save()
|
||||
return redirect(reverse("com:news_list"))
|
||||
return redirect("com:news_list")
|
||||
```
|
||||
|
||||
## Accès à des éléments en particulier
|
||||
@@ -447,10 +447,9 @@ l'utilisateur recevra une liste vide d'objet.
|
||||
Voici un exemple d'utilisation en reprenant l'objet Article crée précédemment :
|
||||
|
||||
```python
|
||||
from django.views.generic import CreateView, DetailView
|
||||
|
||||
from core.auth.mixins import CanViewMixin, CanCreateMixin
|
||||
from django.views.generic import DetailView
|
||||
|
||||
from core.auth.mixins import CanViewMixin
|
||||
from com.models import WeekmailArticle
|
||||
|
||||
|
||||
@@ -459,48 +458,15 @@ from com.models import WeekmailArticle
|
||||
# d'une classe de base pour fonctionner correctement.
|
||||
class ArticlesDetailView(CanViewMixin, DetailView):
|
||||
model = WeekmailArticle
|
||||
|
||||
|
||||
# Même chose pour une vue de création de l'objet Article
|
||||
class ArticlesCreateView(CanCreateMixin, CreateView):
|
||||
model = WeekmailArticle
|
||||
```
|
||||
|
||||
Les mixins suivants sont implémentés :
|
||||
|
||||
- [CanCreateMixin][core.auth.mixins.CanCreateMixin] : l'utilisateur peut-il créer l'objet ?
|
||||
Ce mixin existe, mais est déprécié et ne doit plus être utilisé !
|
||||
- [CanEditPropMixin][core.auth.mixins.CanEditPropMixin] : l'utilisateur peut-il éditer les propriétés de l'objet ?
|
||||
- [CanEditMixin][core.auth.mixins.CanEditMixin] : L'utilisateur peut-il éditer l'objet ?
|
||||
- [CanViewMixin][core.auth.mixins.CanViewMixin] : L'utilisateur peut-il voir l'objet ?
|
||||
- [FormerSubscriberMixin][core.auth.mixins.FormerSubscriberMixin] : L'utilisateur a-t-il déjà été cotisant ?
|
||||
|
||||
!!!danger "CanCreateMixin"
|
||||
|
||||
L'usage de `CanCreateMixin` est dangereux et ne doit en aucun cas être
|
||||
étendu.
|
||||
La façon dont ce mixin marche est qu'il valide le formulaire
|
||||
de création et crée l'objet sans le persister en base de données, puis
|
||||
vérifie les droits sur cet objet non-persisté.
|
||||
Le danger de ce système vient de multiples raisons :
|
||||
|
||||
- Les vérifications se faisant sur un objet non persisté,
|
||||
l'utilisation de mécanismes nécessitant une persistance préalable
|
||||
peut mener à des comportements indésirés, voire à des erreurs.
|
||||
- Les développeurs de django ayant tendance à restreindre progressivement
|
||||
les actions qui peuvent être faites sur des objets non-persistés,
|
||||
les mises-à-jour de django deviennent plus compliquées.
|
||||
- La vérification des droits ne se fait que dans les requêtes POST,
|
||||
à la toute fin de la requête.
|
||||
Tout ce qui arrive avant n'est absolument pas protégé.
|
||||
Toute opération (même les suppressions et les créations) qui ont
|
||||
lieu avant la persistance de l'objet seront appliquées,
|
||||
même sans permission.
|
||||
- Si un développeur du site fait l'erreur de surcharger
|
||||
la méthode `form_valid` (ce qui est plutôt courant,
|
||||
lorsqu'on veut accomplir certaines actions
|
||||
quand un formulaire est valide), on peut se retrouver
|
||||
dans une situation où l'objet est persisté sans aucune protection.
|
||||
|
||||
!!!danger "Performance"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user