mirror of
https://github.com/ae-utbm/sith.git
synced 2025-07-10 03:49:24 +00:00
Improve documentation
This commit is contained in:
@ -7,5 +7,5 @@ est trop complexe pour être résumée ici.
|
||||
|
||||
Nous ne pouvons donc que vous redirigez vers la doc du crédit
|
||||
agricole :
|
||||
https://www.ca-moncommerce.com/espace-client-mon-commerce/up2pay-e-transactions/ma-documentation/
|
||||
[https://www.ca-moncommerce.com/espace-client-mon-commerce/up2pay-e-transactions/ma-documentation/](https://www.ca-moncommerce.com/espace-client-mon-commerce/up2pay-e-transactions/ma-documentation/)
|
||||
|
||||
|
@ -14,11 +14,11 @@ Il existe trois niveaux de permission :
|
||||
- Voir l'objet
|
||||
|
||||
Chacune de ces permissions est vérifiée par une méthode
|
||||
dédiée de la classe `User` :
|
||||
dédiée de la classe [User][core.models.User] :
|
||||
|
||||
- Editer les propriéts : `User.is_owner(obj)`
|
||||
- Editer les valeurs : `User.can_edit(obj)`
|
||||
- Voir : `User.can_view(obj)`
|
||||
- Editer les propriéts : [User.is_owner(obj)][core.models.User.is_owner]
|
||||
- Editer les valeurs : [User.can_edit(obj)][core.models.User.can_edit]
|
||||
- Voir : [User.can_view(obj)][core.models.User.can_view]
|
||||
|
||||
Ces méthodes vont alors résoudre les permissions
|
||||
dans cet ordre :
|
||||
@ -115,9 +115,9 @@ reposent les vérifications de permission.
|
||||
Elles sont disponibles dans le contexte par défaut du
|
||||
moteur de template et peuvent être utilisées à tout moment.
|
||||
|
||||
- `can_edit_prop(obj, user)` : équivalent de `obj.is_owned_by(user)`
|
||||
- `can_edit(obj, user)` : équivalent de `obj.can_be_edited_by(user)`
|
||||
- `can_view(obj, user)` : équivalent de `obj.can_be_viewed_by(user)`
|
||||
- [can_edit_prop(obj, user)][core.views.can_edit_prop] : équivalent de `obj.is_owned_by(user)`
|
||||
- [can_edit(obj, user)][core.views.can_edit] : équivalent de `obj.can_be_edited_by(user)`
|
||||
- [can_view(obj, user)][core.views.can_view] : équivalent de `obj.can_be_viewed_by(user)`
|
||||
|
||||
Voici un exemple d'utilisation dans un template :
|
||||
|
||||
@ -170,29 +170,31 @@ class ArticlesCreateView(CanCreateMixin, CreateView):
|
||||
|
||||
Les mixins suivants sont implémentés :
|
||||
|
||||
- `CanCreateMixin` : l'utilisateur peut-il créer l'objet ?
|
||||
- `CanEditPropMixin` : l'utilisateur peut-il éditer les propriétés de l'objet ?
|
||||
- `CanEditMixin` : L'utilisateur peut-il éditer l'objet ?
|
||||
- `CanViewMixin` : L'utilisateur peut-il voir l'objet ?
|
||||
- `UserIsRootMixin` : L'utilisateur a-t-il les droit root ?
|
||||
- `FormerSubscriberMixin` : L'utilisateur a-t-il déjà été cotisant ?
|
||||
- `UserIsLoggedMixin` : L'utilisateur est-il connecté ?
|
||||
- [CanCreateMixin][core.views.CanCreateMixin] : l'utilisateur peut-il créer l'objet ?
|
||||
- [CanEditPropMixin][core.views.CanEditPropMixin] : l'utilisateur peut-il éditer les propriétés de l'objet ?
|
||||
- [CanEditMixin][core.views.CanEditMixin] : L'utilisateur peut-il éditer l'objet ?
|
||||
- [CanViewMixin][core.views.CanViewMixin] : L'utilisateur peut-il voir l'objet ?
|
||||
- [UserIsRootMixin][core.views.UserIsRootMixin] : L'utilisateur a-t-il les droit root ?
|
||||
- [FormerSubscriberMixin][core.views.FormerSubscriberMixin] : L'utilisateur a-t-il déjà été cotisant ?
|
||||
- [UserIsLoggedMixin][core.views.UserIsLoggedMixin] : L'utilisateur est-il connecté ?
|
||||
(à éviter ; préférez `LoginRequiredMixin`, fourni par Django)
|
||||
|
||||
!!!danger "Performance"
|
||||
|
||||
Ce système maison de permissions ne rend pas trop mal, d'un point de vue esthétique.
|
||||
Mais d'un point de vue performance, c'est un désastre.
|
||||
Vérifier une seule permission peut demander plusieurs requêtes à la db.
|
||||
Et chaque vérification recommence dès le début.
|
||||
Il n'y a aucune jointure en db.
|
||||
Le mieux qu'on a trouvé comme pansement sur ça, c'est utiliser le cache,
|
||||
mais c'est seulement un pansement, qui ne rattrape pas les erreurs architecturales.
|
||||
Ce système maison de permissions ne rend pas trop mal, d'un point de vue esthétique.
|
||||
Mais d'un point de vue performance, il est souvent plus que problématique.
|
||||
En effet, toutes les permissions sont dynamiquement calculées et
|
||||
nécessitent plusieurs appels en base de données qui ne se résument pas à
|
||||
une « simple » jointure mais à plusieurs requêtes différentes et
|
||||
difficiles à optimiser. De plus, à chaque calcul de permission, il est
|
||||
nécessaire de recommencer tous les calculs depuis le début.
|
||||
La solution à ça est de mettre du cache de session sur les tests effectués
|
||||
récemment, mais cela engendre son autre lot de problèmes.
|
||||
|
||||
Sur une vue où on manipule un seul objet, passe encore.
|
||||
Mais sur les `ListView`, on peut arriver à des temps
|
||||
de réponse extrêmement élevés.
|
||||
|
||||
Faites donc doublement, triplement, quadruplement attention,
|
||||
quand vous manipulez le système de permissions.
|
||||
Sur une vue où on manipule un seul objet, passe encore.
|
||||
Mais sur les `ListView`, on peut arriver à des temps
|
||||
de réponse extrêmement élevés.
|
||||
|
||||
Faites donc doublement, triplement, quadruplement attention,
|
||||
quand vous manipulez le système de permissions.
|
||||
|
||||
|
Reference in New Issue
Block a user